1.题目
给定一个二叉树,判断这棵二叉树是否是高度平衡的二叉树
平衡二叉树:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1
2.题目分析
(1)如果一个节点的两个子树的深度之差超过1,则不是平衡二叉树
(2)如果一个节点的两个子树的深度之差不超过1,则是平衡二叉树
3.程序分析
(1)若这棵二叉树为空,返回true;
(2)若左孩子和右孩子的深度之差超过1,返回false;
(3)若左孩子和右孩子的深度之差不超过,则继续第(2)步,以左(右)孩子的节点为新的节点
4.程序源代码
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
class Solution {
public boolean isBalanced(TreeNode root) {
//该二叉树为空
if(root == null){
return true;
}
//二叉树的左右孩子高度差不超过1并且它的左右孩子均为平衡二叉树
return (Math.abs(Depth(root.left) - Depth(root.right)) <= 1) &&
isBalanced(root.left) && isBalanced(root.right);
}
//求树的深度
public static int Depth(TreeNode node){
if(node == null)
return 0;
//返回该节点左右子树的深度最大值+1
return 1+Math.max(Depth(node.left),Depth(node.right));
}
}