这两个答案有什么区别?

时间:2015-09-18 09:39:28

标签: java algorithm

我完成了一个问题“平衡二叉树”,这是我编码的两个版本。第一个是接受的,另一个是失败的。区别在于“+1”的位置,当我把它放在return语句中时,算法通过了。

但为什么我不能把它放在作业陈述中?

失败的测试用例就是这个:

输入:[1,2,2,3,null,null,3,4,null,null,4] 输出:true 预期输出:false (我不知道这个数组是如何转换成二叉树的。)

二叉树节点的定义。

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode (int x) { val = x;}
}

以下是算法:

public boolean isBalanced(TreeNode root) {
    if(depth(root) == -1)
        return false;
    else return true;
}

// algorithm 1
private int depth(TreeNode root) {
    if(root == null)
        return 0;
    int leftdepth = depth(root.left);
    int rightdepth = depth(root.right);
    if(leftdepth == -1 || rightdepth == -1 || (Math.abs(leftdepth - rightdepth) > 1))
        return -1;
    else
        return Math.max(leftdepth,rightdepth) + 1;

// algorithm 2
private int depth(TreeNode root) {
    if(root == null)
        return 0;
    int leftdepth = depth(root.left)+1;
    int rightdepth = depth(root.right)+1;
    if(leftdepth == -1 || rightdepth == -1 || (Math.abs(leftdepth - rightdepth) > 1))
        return -1;
    else
        return Math.max(leftdepth,rightdepth);
}

2 个答案:

答案 0 :(得分:0)

因为您要将值与-1进行比较。如果您愿意,第一个算法将与第二个算法相同:

if(leftdepth == 0 || rightdepth == 0 ...

答案 1 :(得分:0)

算法1是正确的,因为分支的深度是它的子分支加上1(此节点)的深度之和。

算法2不正确,因为它会将null节点的深度记录为1