平衡二叉树
作者:互联网
offer_39
概要:平衡二叉树
题目描述
输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树
思路:
- 平衡二叉树就是左右子树的高度差不超过1的树
- 先计算左右子树的高度
- 如果一棵树只有一个结点,那么它的深度为1;
- 如果根结点只有左子树没有右子树,那么树的深度是左子树的深度加1,加1是加(当前结点)根节点这一层也就是当前结点下面没有结点了,就返回0,然后根据栈弹出,会加上当前这一层,这个+1 就是当前这一层
- 如果既有左子树又有右子树,那么树的深度应该是左、右子树中深度较大的值再加1
- 然后计算高度差
- 最后看高度差来返回结果
- 先计算左右子树的高度
代码实现:
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null) return true;
//获取左子树的深度,注意,传入的是当前树的左子节点
int left = getDepth(root.left);
//获取右子树的深度。传入的是当前树的右子节点
int right = getDepth(root.right);
//如果左右子树的深度的差值>1 就说明不是平衡二叉树
return Math.abs(left - right) > 1? false: true;
}
//获取树的深度
public int getDepth(TreeNode root){//传入的是当前树的头结点,把头结点在的这一层代表深度为1,所以后面要加上当前层也就是+1
return (root == null)? 0: Math.max(getDepth(root.left),getDepth(root.right))+1;
}
标签:结点,getDepth,右子,二叉树,深度,平衡,root 来源: https://www.cnblogs.com/SunAlbert/p/13489890.html