- 题目:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
- 思路:二叉树的平衡即指任一结点的左右子树深度差值不高于1,用二叉树的遍历来做,递归下
- 代码:
class Solution {
int result=0;
public boolean IsBalanced_Solution(TreeNode root){
boolean bl=true;
TreeDepth(root);
if(result==-1) bl=false;
return bl;
}
public int TreeDepth(TreeNode root) {
if(root==null) {
return 0;
}
int left=TreeDepth(root.left)+1;//左子树深度
int right=TreeDepth(root.right)+1;//右子树深度
if(Math.abs(left-right)>1) result=-1;
return Math.max(left,right);//返回当前子树的深度
//或者这样写,进行了剪枝,当左右子树大于-1时,直接返回,不用再遍历剩余的结点了
/*
if(root==null) return 0;
int left=TreeDepth(root.left);
if(letf==-1) return -1;
int right=TreeDepth(root.right);
if(right=-1) return -1;
//如果左右子树的深度差大于1,就返回-1,告诉函数,已经不平衡了,后面的不用再遍历了
//如果不大于1,则说明平衡,返回当前子树的深度。
return Math.abs(left-right)>1?-1:1+Math.max(left,right);
*/
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}