题目:输入一棵二叉树的根节点,判断该树是不是平衡二叉树。
平衡二叉树是指以当前节点为根节点的树,左右子树的深度不得超过1.
方法一:
意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
计算树的深度,树的深度=max(左子树深度,右子树深度)+1。
在遍历过程中,判断左右子树深度相差是否超过1,
如果不平衡,则令树的深度=-1,用来表示树不平衡。
最终根据树的深度是否等于-1来确定是否为平衡树。
public static boolean isBalanced(TreeNode root){
return deepTh(root)!=-1;
}
private static int deepTh(TreeNode root) {
if(root==null){
return 0;
}
int left=deepTh(root.left);
if(left==-1){
return -1;
}
int right=deepTh(root.right);
if(right==-1){
return -1;
}
return Math.abs(left-right)>1?-1:1+Math.max(left,right);
//每个子树都要进行判断,递归时也要进行判断
}
方法二:
使用后序遍历,是因为后序遍历先访问父结点的左右子结点后,再访问父结点的,因此这种