原题:
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
tips:
- 两种解法都用到递归,第一种解法,两个函数都用到了递归,运行时间是3ms;
- 第二种解法,只有一个函数用到了递归,运行时间是2ms;
- 第一种解法最先的时候,用递归会出现栈溢出,改进之后就通过了;
解法一(栈溢出):
public boolean isBalanced(TreeNode root) {
if(root==null)
return true;
boolean flag=true;
int left=height(root.left);
int right=height(root.right);
flag&=Math.abs(left-right)<=1?true:false;
return isBalanced(root.left)&&isBalanced(root.right)&&flag;
}
public int height(TreeNode root){
if(root==null)
return 0;
return 1+Math.max(height(root.left),height(root.right));
}*/
解法一(通过):
public boolean isBalanced(TreeNode root) {
if(root==null)
return true;
boolean flag=true;
int left=height(root.left);
int right=height(root.right);
flag&=Math.abs(left-right)<=1?true:false;
if(flag)
return isBalanced(root.left)&&isBalanced(root.right);
return false;
}
public int height(TreeNode root){
if(root==null)
return 0;
return 1+Math.max(height(root.left),height(root.right));
}*/
解法二:
public boolean isBalanced(TreeNode root) {
if(root==null)
return true;
return height(root)!=-1;
}
public int height(TreeNode root){
if(root==null)
return 0;
int left=height(root.left);
int right=height(root.right);
if(left==-1||right==-1)
return -1;
if(Math.abs(left-right)<=1){
return 1+Math.max(left,right);
}
return -1;
}