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,若是,则直接返回-1。
/**
* 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:
int dfsdepth(TreeNode* root)
{
if(root==NULL) return 0;
int leftdepth=dfsdepth(root->left);
if(leftdepth==-1) return -1;
int rightdepth=dfsdepth(root->right);
if(rightdepth==-1) return -1;
if(abs(leftdepth-rightdepth)>1) return -1;
return max(leftdepth,rightdepth)+1;
}
bool isBalanced(TreeNode* root) {
return dfsdepth(root)!=-1;
}
};
方法二:
class solution {
public:
int depth (TreeNode *root) {
if (root == NULL) return 0;
return max (depth(root -> left), depth (root -> right)) + 1;
}
bool isBalanced (TreeNode *root) {
if (root == NULL) return true;
int left=depth(root->left);
int right=depth(root->right);
return abs(left - right) <= 1 && isBalanced(root->left) && isBalanced(root->right);
}
};