https://leetcode-cn.com/problems/balanced-binary-tree/description/
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
示例 1:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回 true 。
示例 2:
给定二叉树 [1,2,2,3,3,null,null,4,4]
1
/ \
2 2
/ \
3 3
/ \
4 4
返回 false 。
思路
判断平否为平衡二叉树,很定要求输的深度maxDepth()
首先判断根节点的左右子树是否符合平衡二叉树
在判断左右子树的子树是否为平衡二叉树
都符合的情况下才为平衡二叉树
符合平衡二叉树
不符合平衡二叉树
实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//求树的深度
int maxDepth(struct TreeNode* root)
{
if(root == NULL)
return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth +1;
}
bool isBalanced(struct TreeNode* root) {
//空树,高度差 = 0
if(root == NULL)
return true;
struct TreeNode*left = root->left;
struct TreeNode*right = root->right;
int leftDepth = maxDepth(left);
int rightDepth = maxDepth(right);
int gap = abs(leftDepth - rightDepth);
//左右子树的高度差 < 2,并且左右子树也符合平衡二叉树
return gap < 2
&& isBalanced(left)
&& isBalanced(right);
}