1.题目描述
????给定一个二叉树,判断它是否是高度平衡的二叉树。 ????本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
输入:root = [3,9,20,null,null,15,7]
输出:true
2.解题思路
????这一题用递归法解决比较简单,那么我们要明确递归的三个重要条件:
- 递归函数的参数和返回值:参数即当前要传入的结点。返回值应当为以当前结点为根节点的树的高度。而如果当前传入结点为根节点的数已经不平衡了,就没必要返回高度,直接返回-1即可。
- 终止条件:如果碰到了空节点,就返回0,表示当前树的高度为0。
- 单层递归的逻辑:分别求出当前结点为根节点的左右子树的高度,判断其差值是否大于1,大于的话就返回-1,否则返回当前高度。
3.代码实现
class Solution {
public:
int getHeight(TreeNode* node)
{
if(node == nullptr) return 0;
int leftHeight = getHeight(node->left);
if(leftHeight == -1) return -1;
int rightHeight = getHeight(node->right);
if(rightHeight == -1) return -1;
return abs(leftHeight - rightHeight) > 1 ? -1 : 1 + max(leftHeight, rightHeight);
}
bool isBalanced(TreeNode* root) {
return getHeight(root) == -1 ? false : true;
}
};
|