一、110.平衡二叉树
题目链接:https://leetcode.cn/problems/balanced-binary-tree/
文章链接:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
视频链接:https://www.bilibili.com/video/BV1Ug411S7my/?vd_source=721f65ae0501389782be0dcb48a2c421
// 平衡二叉树
/**
* 给定一个二叉树,判断它是否是高度平衡的二叉树
* 本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。
* 解题思路:后序遍历(递归) 返回值为-1说明不是平衡二叉树
*/
public class BalanceBinaryTree {
public int getHeight(TreeNode root){
if (root == null ) return 0;
//左
int leftHeight = getHeight(root.left);
if (leftHeight == -1) {
return -1;
}
//右
int rightHeight = getHeight(root.right);
if (rightHeight == -1){
return -1;
}
//中
int result;
//左右子树高度差大于1,return -1表示已经不是平衡二叉树
//其次返回该节点的高度,本身节点的高度1加上左右子树的最大高度就是该节点的高度
if (Math.abs(rightHeight-leftHeight)>1){
result = -1;
}else {
result = 1 + Math.max(rightHeight,leftHeight);
}
return result;
}
}