110. Balanced Binary Tree

来源:互联网 发布:em算法的基本原理 编辑:程序博客网 时间:2024/05/22 07:46

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.

Solution

solution1

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isBalanced(TreeNode* root) {        if(!root)            return true;        int leftHeight = treeHeight(root->left);        int rightHeight = treeHeight(root->right);        if(abs(leftHeight - rightHeight) > 1)            return false;        return isBalanced(root->left) && isBalanced(root->right);    }    int treeHeight(TreeNode* root)    {        if(!root)            return 0;        int leftHeight = treeHeight(root->left);        int rightHeight = treeHeight(root->right);        return max(leftHeight,rightHeight) + 1;    }};

solution2

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    bool isBalanced(TreeNode* root) {        if(!root)            return true;        if(treeHeight(root) == -1)            return false;        return true;    }    int treeHeight(TreeNode* root)    {        if(!root)            return 0;        int leftHeight = treeHeight(root->left);        if(leftHeight == -1)            return -1;        int rightHeight = treeHeight(root->right);        if(rightHeight == -1)            return -1;        if(abs(leftHeight - rightHeight) > 1)            return -1;        return max(leftHeight,rightHeight) + 1;    }};
0 0
原创粉丝点击