查找二叉树的最大深度

时间:2017-03-31 23:30:23

标签: java tree binary-search-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);
    }
}

我很困惑为什么我写的代码不能给出预期的输出。而且我也对最大深度的定义感到困惑。是否只考虑左侧排列或右侧排列的所有节点,找到最大深度?

2 个答案:

答案 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()方法,它利用这些事实:

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

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