93.平衡二叉树

来源:互联网 发布:指南针炒股软件装不上 编辑:程序博客网 时间:2024/06/05 02:35

给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过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;
    }
};





原创粉丝点击