判断是否为平衡二叉树,借鉴之前,二叉树深度的算法,当左右子树深度差大于1时就不是二叉树,否则就return true,代码如下
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root==null)
return true;
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
int diff=left-right;
if(diff>1||diff<-1)
return false;
return IsBalanced_Solution(root.left)&&IsBalanced_Solution(root.right);
}
public int TreeDepth(TreeNode t){
if(t==null)
return 0;
int left=TreeDepth(t.left);
int right=TreeDepth(t.right);
return Math.max(left,right)+1;
}
}
但由于上面那种方法会多次计算二叉树深度,所以我们需要只遍历一次二叉树节点的方法,即利用类似
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
int dep=IsBalanced(root);
return dep!=-1;
}
public int IsBalanced(TreeNode t){
if(t==null){
//depth=0;
return 0;
}
int depth=0;
int left=IsBalanced(t.left);
int right=IsBalanced(t.right);
if(left!=-1&&right!=-1){
int dif=left-right;
if(dif<=1&&dif>=-1){
depth=1+(left>right?left:right);
return depth;
}
}
return -1;
}
}