Balanced Binary Tree

来源:互联网 发布:淘宝uv价值多少才算好 编辑:程序博客网 时间:2024/05/29 04:48

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 ofevery node never differ by more than 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:    bool isBalanced(TreeNode *root) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int h = 0;        return InternalIsBalanced(root, h);    }    private:    bool InternalIsBalanced(TreeNode *root, int& height) {        if (root == NULL) {            height = 0;            return true;        }        if (root->left == NULL && root->right == NULL) {            height = 1;            return true;        } else if (root->left == NULL) {            int rc = 0;            bool r_balance = InternalIsBalanced(root->right, rc);            height = rc + 1;            return rc < 2 && r_balance;        } else if (root->right == NULL) {            int lc = 0;            bool l_balance = InternalIsBalanced(root->left, lc);            height = lc + 1;            return lc < 2 && l_balance;        } else {            int lc = 0;            int rc = 0;            bool r_balance = InternalIsBalanced(root->right, rc);            bool l_balance = InternalIsBalanced(root->left, lc);            height = rc > lc ? rc + 1 : lc + 1;            int short_height = rc > lc ? rc - lc : lc -rc;            return r_balance && l_balance && short_height < 2;        }    }    };


原创粉丝点击