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.
Example 1:
Given the following tree [3,9,20,null,null,15,7]:
3
/ \
9 20
/ \
15 7
Return true.
Example 2:
Given the following tree [1,2,2,3,3,null,null,4,4]:
1
/ \
2 2
/ \
3 3
/ \
4 4
Return false.
判定一棵树是否是平衡二叉树:
引入两个变量,平衡因子balance和树height的高度,对于一棵树根节点为root 的判定有以下几种情况:
(1)root为空,balance = 1, height = 0;
(2)只有root一个节点,balance = 1, height = 1;
(3)左右子树不为空,后序遍历二叉树,首先计算树的高度,左右子树比较高的加上1,平衡因子:如果左右子树都为平衡二叉树且左右子树高度差的绝对值小于2,则树为平衡二叉树,否则树不是平衡二叉树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include<cmath>
class Solution {
public:
bool isBalanced(TreeNode* root) {
int balance = 0;
int h = 0;
Balance(root, balance, h);
return balance;
}
void Balance(TreeNode* root, int& balance, int& h) {
if (root == NULL) {
balance = 1;
h = 0;
} else if (root -> left == NULL && root -> right == NULL) {
h = 1;
balance = 1;
} else {
int bl = 0, br = 0;
int hl = 0, hr = 0;
Balance(root -> left, bl, hl);
Balance(root -> right, br, hr);
h = (hl > hr ? hl : hr) + 1;
//if (hl - hr < 2 && hl - hr > -2) {
if (abs(hl - hr) < 2){
balance = bl && br;
} else {
balance = 0;
}
}
}
};