0%

balanced-binary-tree

题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

题解

两种思路:自底向上和自顶向下。自底向上计算,每个子树的高度只会计算一次。可以递归先计算当前节点的子节点高度,然后再通过子节点高度判断当前节点是否平衡,从而消除冗余。首先判断子树是否平衡,然后比较子树高度判断父节点是否平衡。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
bool f1(TreeNode* root, int& height){
if (!root) {
height = 0;
return true;
}
int left, right;
if (f1(root->left, left) && f1(root->right, right) && abs(left - right) < 2)
{
height = max(left, right) + 1;
return true;
}
return false;
}
bool isBalanced(TreeNode* root) {
if (!root)return true;
int h;
return f1(root, h);
}

通过函数参数取出计算的结果。