[LeetCode]剑指 Offer 55 - II. 平衡二叉树
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]剑指 Offer 55 - II. 平衡二叉树相关的知识,希望对你有一定的参考价值。
输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过 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 。
限制:
- 0 <= 树的结点个数 <= 10000
题解一:
/**
* 剑指 Offer 55 - II. 平衡二叉树
*/
public boolean isBalanced(TreeNode root)
/*
* 后序遍历 + 剪枝 (从底至顶):对二叉树做后序遍历,从底至顶返回子树深度,若判定某子树不是平衡树则 “剪枝” ,向上返回
*/
return recur(root) != -1;
private int recur(TreeNode root)
if (root == null)
return 0;
int left = recur(root.left);
if (left == -1)
return -1;
int right = recur(root.right);
if (right == -1)
return -1;
// 判断左、右子树高度差是否小于 2,是则返回当前树的高度,否则返回 -1 代表不是平衡二叉树
return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;
题解二:
/**
* 剑指 Offer 55 - II. 平衡二叉树
*/
public boolean isBalanced(TreeNode root)
/*
* 先序遍历 + 判断深度 (从顶至底)
*/
if (root == null)
return true;
return Math.abs(dfs(root.left) - dfs(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right);
private int dfs(TreeNode root)
if (root == null)
return 0;
// 返回树的深度
return Math.max(dfs(root.left), dfs(root.right)) + 1;
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/ping-heng-er-cha-shu-lcof
以上是关于[LeetCode]剑指 Offer 55 - II. 平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode|剑指 Offer 55 - I. 二叉树的深度|104. 二叉树的最大深度(rust和go)
算法leetcode|剑指 Offer 55 - I. 二叉树的深度|104. 二叉树的最大深度(rust和go)
leetcode-剑指 Offer 55 - II平衡二叉树
LeetCode664. 奇怪的打印机 / 剑指 Offer 55 - I. 二叉树的深度 / 剑指 Offer 55 - II. 平衡二叉树