输入一棵二叉树,判断该二叉树是否是平衡二叉树。
平衡二叉树:平衡二叉树的提出就是为了保证树不至于太倾斜,尽量保证两边平衡。因此它的定义如下:
(1)平衡二叉树要么是一棵空树
(2)要么保证左右子树的高度之差不大于 1
(3)子树也必须是一颗平衡二叉树
思路
(1)需要注意是左右子树中的高度差,即分别为左右两个子树中的最长路径(图2所示);而不是左右子树中的两条路径差(图1所示的错误)。
(2)解法1——直接解法,就是递归计算每一个结点的左右子树的深度,然后比较进行计算是否超过1的高度差。但是底层的结点被遍历了多次,不是最优解法。
(3)
解法1
nowcoder的AC
提交时间:2020-01-14 , 语言:Java ,运行时间: 35 ms ,占用内存:9492K ,状态:答案正确
import java.lang.Math;
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if(root == null){
return true;
}
int left = TreeDepth(root.left);
int right = TreeDepth(root.right);
int diff = left-right;
if(diff>1 || diff<-1){
return false;
}
return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
}
//carculate the depth
int TreeDepth(TreeNode node){
if(node == null){
return 0;
}
int left = TreeDepth(node.left);
int right = TreeDepth(node.right);
// left subtree length
return Math.max(left, right)+1;
}
}