我正在读二叉树。在练习编码问题时,我遇到了一些解决方案,其中要求找到二叉树的最小深度。现在根据我的理解,深度是从根到节点的边数(叶节点的情况下为叶节点/二叉树)
二叉树{1,2}的最小深度是多少
根据我的解决方案,应该是1。
根节点的深度为0,所以这里给定树的深度为1,请参考下面的递归和迭代解,以找到二叉树的最小深度。
递归解:
public static int findMinDepth(BTNode root) {
if (root == null || (root.getLeft() == null && root.getRight() == null)) {
return 0;
}
int ldepth = findMinDepth(root.getLeft());
int rdepth = findMinDepth(root.getRight());
return (Math.min(rdepth + 1, ldepth + 1));
}
迭代解决方案:
public static int minDepth(BTNode root) {
int minDepth = Integer.MAX_VALUE;
Stack<BTNode> nodes = new Stack<>();
Stack<BTNode> path = new Stack<>();
if (root == null) {
return -1;
}
nodes.push(root);
while (!nodes.empty()) {
BTNode node = nodes.peek();
if (!path.empty() && node == path.peek()) {
if (node.getLeft() == null && node.getRight() == null && path.size() <= minDepth) {
minDepth = path.size() - 1;
}
path.pop();
nodes.pop();
} else {
path.push(node);
if (node.getRight() != null) {
nodes.push(node.getRight());
}
if (node.getLeft() != null) {
nodes.push(node.getLeft());
}
}
}
return minDepth;
}
请记住,叶节点既没有左子节点,也没有右子节点。
1
/
/
2
这里2是叶节点,但1不是。所以这种情况下的最小深度是2,假设根节点的深度是1。
#include<vector>
#include<iostream>
#include<climits>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
int minDepth(TreeNode *root) {
if(root == NULL) return 0;
return getDepth(root);
}
int getDepth(TreeNode *r ){
if(r == NULL) return INT_MAX;
if(r->left == NULL && r->right == NULL)
return 1;
return 1+ min(getDepth(r->left), getDepth(r->right));
}
};
我的测试解决方案
public int minDepth(TreeNode root) {
if(root == null){
return 0;
}
int ldepth = minDepth(root.left);
int rdepth = minDepth(root.right);
if(ldepth == 0){
return 1+rdepth;
}else if(rdepth == 0){
return 1+ldepth;
}
return (1 + Math.min(rdepth, ldepth));
}
在这里,我们计算节点的深度(最小左子树深度)和深度(最小右子树深度)。然后,如果深度为零,但深度不是,这意味着当前节点不是叶节点,因此返回1深度。当我们为当前叶节点返回1 0的时候,如果r深度和l深度都是0,那么'if'条件仍然有效。
“else-if”分支的类似逻辑。在“return”语句中,当两个“if”条件都失败时,我们将向左分支和右分支返回递归调用的最小值1(当前节点)。
我正在处理LeetCode问题111。二叉树的最小深度: 给定一棵二叉树,求其最小深度。 最小深度是从根节点到最近的叶节点的最短路径上的节点数。 注意:叶是没有子节点的节点。 我使用了广度优先的算法,并试图改变它以使其与问题保持一致。但是函数返回的是。 有人能解释为什么会这样吗?
我在阅读下面的帖子后提出这个问题: 如何找到树的最小可能高度? 实际上,如果给二叉树的输入如下:100,50,70,60,我希望我的算法返回4。 但是下面的代码只返回1,因为它不区分叶[left==NULL] 没有人解释过如果我们希望输出为4而不是1,我们应该做什么。 有人能给我看看返回4而不是1的代码吗? 我认为我在上面选择了错误的样本值,人们对我真正想要的是什么感到困惑!!因此,将我的问题重新
本文向大家介绍Python3实现二叉树的最大深度,包括了Python3实现二叉树的最大深度的使用技巧和注意事项,需要的朋友参考一下 问题提出: 给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 解决思路:递归法求解。从根结点向下遍历,每遍历到子节点depth+1。 代码实现( ̄▽ ̄): 时间和空间消耗: 以上就是本文的
NowCoder 题目描述 从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 解题思路 // java public int TreeDepth(TreeNode root) { return root == null ? 0 : 1 + Math.max(TreeDepth(root.left), TreeDepth(root.right));
本文向大家介绍Python实现二叉树的最小深度的两种方法,包括了Python实现二叉树的最小深度的两种方法的使用技巧和注意事项,需要的朋友参考一下 找到给定二叉树的最小深度 最小深度是从根节点到最近叶子节点的最短路径上的节点数量 注意:叶子节点没有子树 Example: Given binary tree [3,9,20,null,null,15,7], 3 / \ 9 20
一、题目 输入一棵二叉树的根结点,求该树的深度。从根结点到叶子点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 二、解题思路 如果一棵树只有一个结点,它的深度为1。 如果根结点只有左子树而没有右子树, 那么树的深度应该是其左子树的深度加1,同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1. 如果既有右子树又有左子树, 那该树的深度就是其左、右子