题目简介:
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
返回 true
。
给定二叉树 [1,2,2,3,3,null,null,4,4]
1 2 3 4 5 6 7
| 1 / \ 2 2 / \ 3 3 / \ 4 4
|
返回 false
。
思路:
首先写一个求左右子树高度的函数,然后需要遍历每个结点,若每个结点左右子树高度差都不超过1,则返回true
。
tip:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
class Solution { public:
int height(TreeNode* root){
if(root == NULL) return 0;
int right_height = height(root -> right); int left_height = height(root -> left);
return max(right_height, left_height) + 1; }
bool isBalanced(TreeNode* root) {
if(root == NULL) return true;
return abs(height(root -> left) - height(root -> right)) <= 1 && isBalanced(root -> left) && isBalanced(root -> right); } };
|