【解题思路】
一个节点的左右节点都是平衡二叉树,且左右节点的深度差不大于1,这个节点开始的树即为平衡二叉树。如果一个二叉树的每个节点开始的树都是平衡二叉树,这棵树就是平衡二叉树。
/**
* Definition for a binary tree node.
* 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;
return search(root);
}
public boolean search(TreeNode node)
{
if(node == null) return true;
boolean flag1 = search(node.left);
boolean flag2 = balance(node);
boolean flag3 = search(node.right);
if(flag1 && flag2 && flag3)
{
return true;
}
else{
return false;
}
}
public boolean balance(TreeNode node)
{
if(node == null) return true;
if(Math.abs(depth(node.left) - depth(node.right)) > 1) return false;
return true;
}
public int depth(TreeNode node)
{
if(node == null) return 0;
else return Math.max(depth(node.left), depth(node.right)) + 1;
}
}
官方代码更优雅:
class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) {
return true;
} else {
return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
}
}
public int height(TreeNode root) {
if (root == null) {
return 0;
} else {
return Math.max(height(root.left), height(root.right)) + 1;
}
}
}