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);
}
}
我很困惑为什么我写的代码不能给出预期的输出。而且我也对最大深度的定义感到困惑。是否只考虑左侧排列或右侧排列的所有节点,找到最大深度?
答案 0 :(得分:1)
我不确定你是在谈论树的高度还是节点的深度 这是高度和深度的定义。
节点高度 - 节点的高度是该节点与叶子之间最长的向下路径上的边数。
深度 - 节点的深度是从节点到树的根节点的边数。
R
/ \
A B
/ \ / \
C D E F
\
G
例如:
节点R的深度为0,高度为3
节点G的深度为3,高度为0
假设您正在寻找树的高度 为什么你的课程不能得到你想要的结果呢? 这是因为你的代码没有遍历树内的所有节点
让我们以图中的树为例:
在你的循环中,它将首先让focusNode,focusNode2 =节点R
focusNode R> A> ç
focusNode2 R> B> F>终止
树中间的所有子节点都没有计数,如果你的树不是一个完美的二叉树那么你会得到错误的答案。
建议您阅读一些关于如何遍历预订Travesal树的算法 https://en.wikipedia.org/wiki/Tree_traversal
答案 1 :(得分:1)
你没有遍历整棵树。你只是在最左边和最右边的路径上奔跑。
通常,递归是你的二元树的朋友,因为每个节点都可以被简单地处理。
为节点类定义一个depth()
方法,它利用这些事实:
depth()
方法(即递归)找到非null子项的深度this
节点的深度是其子节点深度的最大值加1(因此它自行计算)实现它并在根节点上调用depth()
以查找树的最大深度。相应实现的递归性质将遍历整个树。