1、题目
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
示例1:
输入:root = [3,9,20,null,null,15,7]
输出:true
示例2:
输入:root = [1,2,2,3,3,null,null,4,4]
输出:false
示例3:
输入:root = []
输出:true
提示:
- 树中的节点数在范围 [0, 5000] 内
- 104 <= Node.val <= 104
2、思路
自底向上 开始计算该节点的高度
若左右叶子结点高度之差 <= 1,节点 = 左右子结点的最大值+1,否则整棵树都不是平衡二叉树 则返回-1(自己随便设置一个负数),加上左右高度值若为-1则返回负一,一直返回直至根节点。若返回值-1则不是平衡树返回false,不是则返回true。遇到空节点返回0表示开始计算 叶子结点即为0+1为1.
3、C++代码
class Solution {
public:
bool isBalanced(TreeNode* root) {
return height(root) != -1;
}
int height(TreeNode *root){
if(root == nullptr) return 0;
int left = height(root->left);
if(left == -1) return -1;
int right = height(root->right);
if(right == -1) return -1;
return abs(left-right) <= 1? max(left,right)+1 : -1;
}
};
4、java代码
class Solution {
public boolean isBalanced(TreeNode root) {
return height(root) != -1;
}
int height(TreeNode root){
if(root == null) return 0;
int left = height(root.left);
if(left == -1) return -1;
int right = height(root.right);
if(right == -1) return -1;
return Math.abs(left-right) <= 1? Math.max(left,right)+1 : -1;
}
}