【发布时间】:2015-09-18 09:39:27
【问题描述】:
我完成了一个问题“平衡二叉树”,这是我编写的两个版本。第一个是接受的,另一个是失败的。不同的是“+1”的位置,当我把它放在return语句中时,算法通过了。
但是为什么我不能把它放在赋值语句中呢?
失败的测试用例是这个:
输入:[1,2,2,3,null,null,3,4,null,null,4] 输出:真 预期输出:假 (我不知道这个数组是怎么变成二叉树的。)
二叉树节点的定义。
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);
}
【问题讨论】: