[英]Finding the maximum depth of a binary tree
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class Solution {
public int maxDepth(TreeNode root) {
TreeNode focusNode = root;
TreeNode focusNode2 = root;
int count = 0;
int count1 = 0;
boolean a = true;
while (a) {
if (focusNode != null) {
count++;
focusNode = focusNode.left;
}
if (focusNode2 != null) {
count++;
focusNode2 = focusNode2.right;
} else {
a = false;
}
}
return Math.max(count,count1);
}
}
我很困惑为什么我编写的这段代码无法提供预期的输出。 我也对最大深度的定义感到困惑。 找到最大深度是否仅考虑了在左侧排列或在右侧排列的所有节点?
我不确定您是在谈论树的高度还是节点的深度。
这是高度和深度的定义。
节点的高度– 节点的高度是该节点和叶子之间最长的向下路径上的边数。
深度 –节点的深度是从节点到树的根节点的边数。
R
/ \
A B
/ \ / \
C D E F
\
G
例如:
节点R的深度为0,高度为3
节点G的深度为3,高度为0
假设您正在寻找树的高度。
为什么您的程序无法获得您想要的结果?
这是因为您的代码没有遍历树中的所有节点
让我们以图中的树为例:
在您的循环中,它将首先让focusNode,focusNode2 =节点R
focusNode R> A> C
focusNode2 R> B> F>终止
树中间的所有子节点都不算,如果您的树不是完美的二叉树,那么您将得到错误的答案。
建议您阅读一些关于如何遍历树的算法,例如Pre-order Travesal
https://zh.wikipedia.org/wiki/Tree_traversal
您没有遍历整棵树。 您只沿着最左边和最右边的路径行驶。
通常,递归是您使用二叉树的朋友,因为可以简单且孤立地对待每个节点。
使用以下事实为节点类定义depth()
方法:
depth()
方法(即递归)来找到其depth()
this
节点的深度是其子节点的深度的最大值加1(因此它自己进行计数) 实现该功能并在根节点上调用depth()
以找到树的最大深度。 相应实现的递归性质将遍历整个树。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.