繁体   English   中英

查找二叉树的最大深度

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM