【问题标题】:Trying to find the diameter of a binary tree, but I don't know why I'm failing one particular test case试图找到二叉树的直径,但我不知道为什么我没有通过一个特定的测试用例
【发布时间】:2021-01-19 15:58:48
【问题描述】:

在 leetcode 上练习我的算法技能时,我遇到了这个问题 https://leetcode.com/problems/diameter-of-binary-tree/

我尝试实现类似于查找树的最大深度的方法。这就是为什么我创建了第二个函数并使用根节点的左右子节点调用它。但它不是 100% 有效,我无法弄清楚。我粘贴了失败的测试用例。

class Solution {
    public int diameterOfBinaryTree(TreeNode root) {
        if(root == null) return 0;
        return check(root.left) + check(root.right);
    }
    
    public int check(TreeNode root){
        if(root == null) return 0;
        
        return Math.max(check(root.left), check(root.right)) + 1;
    }
}
[4,-7,-3,null,null,-9,-3,9,-7,-4,null,6,null,-6,-6,null,null,0,6,5,null,9,null,null,-1,-4,null,null,null,-2]

输出为 7,但需要返回 8。 我将链接粘贴到 leetcode 问题中,以便您可以输入测试用例并可视化树。我实际上不明白为什么它应该等于 8。根据我的理解,答案应该是 7,但显然必须是 8。我在问题的讨论部分发布了它,但没有人回复。

【问题讨论】:

    标签: java algorithm


    【解决方案1】:

    您计算直径的方法是错误的。它假设任何节点之间的最长路径都经过根。请注意,该问题警告您不要做出这种假设:

    此路径可能会或可能不会通过根。

    您的代码找到了长度为 7 的路径 [7, 4, -3, -9, 9, 6, 0, -1],但是如果您避开根节点,则路径更长,[-1, 0, 6, 9, -9, -7, -6, 9, 2],长度为 8。在这条路径中,我们从叶节点 -1 向上四层到达 -9,然后再向下返回四层通过-7右边的-6到叶子节点2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-08
      • 2021-12-11
      • 2021-11-28
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多