LeetCode 剑指 Offer 55 - II. 平衡二叉树
题目描述

思路分析
解法一:后序剪枝(推荐)
核心思路:
- 递归计算子树高度,若发现某子树不平衡则返回 -1。
- 当前节点若左右高度差超过 1,也返回 -1。
- 最终根节点高度不为 -1 即为平衡二叉树。
复杂度分析:
- 时间复杂度:O(n),其中 n 表示节点数,每个节点只访问一次。
- 空间复杂度:O(h),其中 h 表示树高,递归栈空间。
class Solution {
public boolean isBalanced(TreeNode root) {
return height(root) != -1;
}
private int height(TreeNode node) {
if (node == null) {
return 0;
}
int left = height(node.left);
if (left == -1) {
return -1;
}
int right = height(node.right);
if (right == -1) {
return -1;
}
if (Math.abs(left - right) > 1) {
return -1;
}
return Math.max(left, right) + 1;
}
}
func isBalanced(root *TreeNode) bool {
return height(root) != -1
}
func height(node *TreeNode) int {
if node == nil {
return 0
}
left := height(node.Left)
if left == -1 {
return -1
}
right := height(node.Right)
if right == -1 {
return -1
}
if left-right > 1 || right-left > 1 {
return -1
}
if left > right {
return left + 1
}
return right + 1
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 110. 平衡二叉树 | 简单 | 递归 |
| 104. 二叉树的最大深度 | 简单 | 递归 |
| 543. 二叉树的直径 | 简单 | 递归 |
| 404. 左叶子之和 | 简单 | DFS |
| 剑指 Offer 55 - II. 平衡二叉树 | 简单 | 递归 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!