Balanced Binary Tree

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.

思路:首先我们先熟悉平衡二叉树的定义,平衡二叉树或为空树,或为如下性质的二叉排序树:1)左右子树深度之差的绝对值不超过1;2)左右子树仍然为平衡二叉树.

      平衡因子BF=左子树深度-右子树深度.

平衡二叉树每个结点的平衡因子只能是10-1。若其绝对值超过1,则该二叉排序树就是不平衡的。

这道题主要就是计算左右子树各个深度,然后判断左右子树深度之差的绝对值不超过1.使用递归

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int DepthBalanced(TreeNode *root)
    {
        int pLeft,pRight;
        if(root==NULL)
            return 0;
        if(root->left==NULL)
            return DepthBalanced(root->right)+1;
        else if(root->right==NULL)
            return DepthBalanced(root->left)+1;
        else
        {
            pLeft=DepthBalanced(root->left);
            pRight=DepthBalanced(root->right);
            return (pLeft>pRight)?(pLeft+1):(pRight+1);
        }
    }
    bool isBalanced(TreeNode *root) {
        int pLeft,pRight;
        if(root==NULL)
            return true;
        pLeft=DepthBalanced(root->left);
        pRight=DepthBalanced(root->right);
        if(pLeft-pRight>=-1 && pLeft-pRight<=1)
            return isBalanced(root->left) && isBalanced(root->right);
        return false;
    }
};

 另一种解法:原理差不多,把判断拿到另一个函数中去判断了。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int check(TreeNode *root,bool &value)
    {
        if(root==NULL)
        {
            return 0;
        }
        int pLeft=check(root->left,value);
        int pRight=check(root->right,value);
        int depth=(pLeft>pRight)?(pLeft+1):(pRight+1);
        if(pLeft-pRight<-1 || pLeft-pRight>1)
            value=false;
        return depth;
    }
    bool isBalanced(TreeNode *root) {
        bool value=true;
        check(root,value);
        return value;
    }
};

 

posted @ 2014-03-14 22:11  Awy  阅读(134)  评论(0编辑  收藏  举报