4.1 二叉搜索树


4.2 平衡二叉树

- 理解一下怎么调整就好,不需要掌握左旋右旋之类的。也确实不太好记。
练习:leetcode [110] 平衡二叉树
//给定一个二叉树,判断它是否是高度平衡的二叉树。
//
// 本题中,一棵高度平衡二叉树定义为:
//
//
// 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过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 。
//
//
// Related Topics 树 深度优先搜索
// 👍 505 👎 0
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) return true; // 特殊情况:节点为空,认为是平衡
// 采用先序遍历所有节点
// ① 判断当前节点
int balanceFactor = hight(root.left) - hight(root.right);
if (balanceFactor < -1 || balanceFactor > 1) return false;
// ② 判断左子树,递归 ③ 判断右子树,递归
return isBalanced(root.left) && isBalanced(root.right);
}
private int hight(TreeNode root) { // 计算树的高度
if (root == null) return 0; // 特殊情况:空树为0
int leftHight = hight(root.left); // 左子树高度
int rightHight = hight(root.right); // 右子树高度
int Hight = leftHight > rightHight ? leftHight : rightHight;
return Hight + 1; // 该树的高度为左右子树高度之中最大的一个,并+1(因为1个节点的高度为1)
}
}
//leetcode submit region end(Prohibit modification and deletion)
20:29 info
解答成功:
执行耗时:1 ms,击败了99.90% 的Java用户
内存消耗:38.1 MB,击败了99.63% 的Java用户
*4.x 小白专场:是否同一棵二叉搜索树
略