110. 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.
解法一:递归计算节点的高度
/**
* 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 == NULL)
return true;
if(abs(height(root->left) - height(root->right)) > 1)
return false;
return isBalanced(root->left) && isBalanced(root->right);
}
int height(TreeNode* root){
if(root == NULL)
return 0;
return max(height(root->left), height(root->right))+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:
bool isBalanced(TreeNode* root) {
// depth代表当前节点的深度
int depth = 0;
return is(root, depth);
}
// 不仅返回当前节点的左右子树是否平衡的bool值,还要返回当前传入节点的最大深度
bool is(TreeNode* root, int& depth){
// 终止条件,假设空树也是BST
if(root == NULL){
depth = 0;
return true;
}
int left = 0;
int right = 0;
// 如果左右都是平衡的
if(is(root->left, left) && is(root->right, right)){
int dif = abs(left -right);
if(dif <= 1){
depth = max(left, right) + 1;
return true;
}
}
// 不平衡的出现后就不需要管深度了,直接返回就完了,返回一次false,后面全是false
return false;
}
};