Java 求二叉树的最大深度

Java 求二叉树的最大深度,java,tree,binary-search-tree,Java,Tree,Binary Search Tree,我不明白为什么我写的代码不能给出预期的输出。我也对最大深度的定义感到困惑。寻找最大深度仅仅是考虑所有在左边排列的节点还是在右边排列的节点 我不确定你说的是树的高度还是节点的深度。 这里是高度和深度的定义 节点高度–节点高度是该节点与叶子之间最长向下路径上的边数 深度–节点的深度是从节点到树的根节点的边数 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) {

我不明白为什么我写的代码不能给出预期的输出。我也对最大深度的定义感到困惑。寻找最大深度仅仅是考虑所有在左边排列的节点还是在右边排列的节点

我不确定你说的是树的高度还是节点的深度。
这里是高度和深度的定义

节点高度–节点高度是该节点与叶子之间最长向下路径上的边数

深度–节点的深度是从节点到树的根节点的边数

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的深度为0,高度为3
节点G的深度为3,高度为0

假设您正在查找树的高度。
为什么您的计划无法实现您的愿望?
这是因为您的代码没有遍历树中的所有节点

让我们以图中的树为例:
在循环中,它将首先让focusNode,focusNode2=node R

焦点节点R>A>C
焦点节点2 R>B>F>终止

树中间的所有子节点都不计算在内,如果您的树不是一个完美的二叉树,那么您将得到错误的答案

建议您阅读一些关于如何遍历树的算法,如Pre-order Travesal

我不确定你说的是树的高度还是节点的深度。
这里是高度和深度的定义

节点高度–节点高度是该节点与叶子之间最长向下路径上的边数

深度–节点的深度是从节点到树的根节点的边数

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的深度为0,高度为3
节点G的深度为3,高度为0

假设您正在查找树的高度。
为什么您的计划无法实现您的愿望?
这是因为您的代码没有遍历树中的所有节点

让我们以图中的树为例:
在循环中,它将首先让focusNode,focusNode2=node R

焦点节点R>A>C
焦点节点2 R>B>F>终止

树中间的所有子节点都不计算在内,如果您的树不是一个完美的二叉树,那么您将得到错误的答案

建议您阅读一些关于如何遍历树的算法,如Pre-order Travesal

您没有遍历整棵树。你只沿着最左边和最右边的路径跑

通常,递归是二叉树的朋友,因为每个节点都可以简单地单独处理

为节点类定义一个
depth()
方法,该方法利用以下事实:

  • 空子级的深度为零
  • 通过调用其
    depth()
    方法(即递归)可以找到非null子级的深度
  • 节点的深度是其子节点深度的最大值,加上1(因此它计算自身)

实现该操作并在根节点上调用
depth()
,以查找树的最大深度。相应实现的递归性质将遍历整个树。

您没有遍历整个树。你只沿着最左边和最右边的路径跑

通常,递归是二叉树的朋友,因为每个节点都可以简单地单独处理

为节点类定义一个
depth()
方法,该方法利用以下事实:

  • 空子级的深度为零
  • 通过调用其
    depth()
    方法(即递归)可以找到非null子级的深度
  • 节点的深度是其子节点深度的最大值,加上1(因此它计算自身)

实现该操作并在根节点上调用
depth()
,以查找树的最大深度。相应实现的递归性质将遍历整个树。

你能在不正确的地方画一棵树吗?你能在不正确的地方画一棵树吗?