我完成了一个问题“平衡二叉树”,这是我编码的两个版本。第一个是接受的,另一个是失败的。区别在于“+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);
}
答案 0 :(得分:0)
因为您要将值与-1进行比较。如果您愿意,第一个算法将与第二个算法相同:
if(leftdepth == 0 || rightdepth == 0 ...
答案 1 :(得分:0)
算法1是正确的,因为分支的深度是它的子分支加上1
(此节点)的深度之和。
算法2不正确,因为它会将null
节点的深度记录为1
。