描述:
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。
样例:
给出二叉树 A={3,9,20,#,#,15,7}
,
B={3,#,20,15,7}
A) 3 B) 3 / \ \ 9 20 20 / \ / \ 15 7 15 7
二叉树A是高度平衡的二叉树,但是B不是。
标签:递归 分治法
思路:
参考97题求二叉树的深度,先求出根结点的左右子树的深度,然后判断它们的深度相差不超过1,如果否,则不是一棵二叉树;如果是,再用同样的方法分别判断左子树和右子树是否为平衡二叉树,如果都是,则这就是一棵平衡二叉树。
注意:在遍历结点的同时记录下该结点及其子树是否是平衡的,避免重复访问。
代码:
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
bool isbalanced;
bool isBalanced(TreeNode *root){
isbalanced=true;
getHeight(root);
return isbalanced;
}
int getHeight(TreeNode *node){
int lheight=0,rheight=0,height;
if(node!=NULL){
height=1;
lheight+=getHeight(node->left);
rheight+=getHeight(node->right);
if(lheight>=rheight){
height+=lheight;
if(lheight-rheight>1){
isbalanced=false;
}
}
else {
height+=rheight;
if(rheight-lheight>1){
isbalanced=false;
}
}
}
else {
height=0;
}
return height;
}
};