剑指 Offer 55 - II. 平衡二叉树
限制:
1 <= 树的结点个数 <= 10000
思路:递归
设置一个boolean全局变量balance,表示二叉树是否平衡。
balance初始化为true,另外设置一个traverse函数来递归二叉树:
(1)当root为空时,直接返回高度0;
(2)递归得出左子树高度left和右子树高度right;
(3)若左、右子树的高度差大于1,则balance = false;
(4)返回当前子树的深度,即节点 root 的左 、 右子树的深度最大值 +1
isBalanced函数中,返回balance,证明二叉树是否平衡。
class Solution {
boolean balance;
public boolean isBalanced(TreeNode root) {
balance = true;
traverse(root);
return balance;
}
public int traverse(TreeNode root) {
if (root == null) return 0;
int left = traverse(root.left);
int right = traverse(root.right);
if (Math.abs(left - right) > 1) {
balance = false;
}
return 1 + Math.max(left, right);
}
}