Problem
Given a binary tree, determine if it is height-balanced.
For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
Example
1
/ \
2 3
return true;
Algorithm
整理一下题意:给定一棵二叉树,判断其是否是平衡的。本题中,对于平衡的定义是,对于这棵二叉树,若其任意子树的每个叶节点深度之间相差不大于1,则认为这棵二叉树是平衡二叉树。
根据定义,判断某棵树是否是平衡二叉树,需要比较其子树的高度。于是可以递归,若某根节点的左右两棵子树均为平衡二叉树,而两者比较也满足平衡条件,则该棵树为平衡二叉树。
因为涉及高度比较,需要求每个叶节点的高度,使用递归DFS方法。注意求高度时是求最大高度,以最大高度来作比较。比较两边子树高度时,若相差小于1,则需要转移到下一层继续递归判断。
//DFS
class Solution {
public:
bool isBalanced(TreeNode* root) {
if(root==NULL) return true;
int l=height(root->left);
int r=height(root->right);
if(abs(l-r)<=1) return isBalanced(root->left)&&isBalanced(root->right);
else return false;
}
int height(TreeNode* root){
if(root==NULL) return 0;
if(root->left==NULL) return 1+height(root->right);
if(root->right==NULL) return 1+height(root->left);
return 1+max(height(root->left),height(root->right));
}
};