题目:
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
思路:
- 首先得明白平衡二叉树的概念:在二叉树的基础上,任意结点的左右子树的高度相差不超过1
- 由于不要求是否排序,所以不需要判断左右子节点的大小
- 可以在获取二叉树深度的基础上做判断,如果有一个结点的左右差值超过1,那么返回一个负值
- 因为如果是平衡二叉树,遍历后最终返回的应该是树的高度,最小为0不会为负值(也有高度默认为1的说法,不纠结)
代码:
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
return TreeDepth(root) != -1;
}
public int TreeDepth(TreeNode root){
if(root == null){
return 0;
}
int left = TreeDepth(root.left);
if(left == -1){
return -1;
}
int right = TreeDepth(root.right);
if(right == -1){
return -1;
}
if(Math.abs(left - right)>1){
return -1;
}
return Math.max(left, right) + 1;
}
}