参考:学习自该大佬
题目
实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。
分析
1.求出左子树与右子树的高度差,大于1则false
2.如何求?
递归求出,如果节点为空那么则深度为0,这同时也是递归出口,若不为空则递归左子树与右子树。
注意:最终二叉树的高度是左右子树取高度高的加1
代码:
import java.util.*;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}*/
public class Balance {
public boolean isBalance(TreeNode root) {
// write code here
if(root==null){
return true;
}
int left = getTreeHeight(root.left);
int right = getTreeHeight(root.right);
return Math.abs(left - right) <= 1;
}
public static int getTreeHeight(TreeNode root){
if(root==null){
return 0;
}
//这里为什么加1?,因为root为null时返回的是0,我们假设只有三个节点的完全二叉树
//那是不是最后的结果就是根节点的左孩子0+0+1,根节点的右孩子0+0+1,最后1和1取大的再加1,不就是2嘛
return Math.max(getTreeHeight(root.left),getTreeHeight(root.right))+1;
}
}