1.题目
输入一棵节点数为 n 二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
平衡二叉树(Balanced Binary Tree),具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
2.题解
先求出以每个结点为根的树的高度,然后再判断,其实可以直接再求高度的同时,直接判断即可。
利用后序遍历:左子树、右子树、根节点,可以先递归到叶子节点,然后在回溯的过程中来判断是否满足条件。
3.代码
public int depth(TreeNode root){
if(root==null){
return 0;
}
int t = depth(root.left);
if(t==-1){
return -1;}
int w = depth(root.right);
if(w==-1){
return -1;}
int a = Math.abs(t-w);
if(a>1){
return -1;}
return Math.max(t,w)+1;
}
public boolean IsBalanced_Solution(TreeNode root) {
return depth(root)!=-1;
}