day18 题目:剑指 Offer 55 - I. 二叉树的深度、剑指 Offer 55 - II. 平衡二叉树
知识点:树、dfs/bfs,难度为简单、简单
学习计划链接:「剑指 Offer」 - 学习计划
题目 | 知识点 | 难度 |
---|---|---|
剑指 Offer 55 - I. 二叉树的深度 | 树、深度优先搜索、广度优先搜索 | 简单 |
剑指 Offer 55 - II. 平衡二叉树 | 树、深度优先搜索、二叉树 | 简单 |
# 剑指 Offer 55 - I. 二叉树的深度
输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。
例如:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
提示:
节点总数 <= 10000
注意:本题与主站 104 题相同:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/
# 思路及代码
递归,直接返回左右两边最大的深度 + 1
/** | |
* @param {TreeNode} root | |
* @return {number} | |
*/ | |
var maxDepth = function(root) { | |
if(!root) return 0 | |
return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1 | |
}; |
# 剑指 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
注意:本题与主站 110 题相同:https://leetcode-cn.com/problems/balanced-binary-tree/
# 思路及代码
先判断当前结点的左右子树高度是否满足平衡二叉树要求,然后判断左右子树是否为平衡二叉树,两条件都满足才能为平衡二叉树
/** | |
* @param {TreeNode} root | |
* @return {boolean} | |
*/ | |
var isBalanced = function(root) { | |
function countHeight(root) { | |
if(!root) return 0 | |
return Math.max(countHeight(root.left), countHeight(root.right)) + 1 | |
} | |
if(!root) return true | |
return Math.abs(countHeight(root.left) - countHeight(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right) | |
}; |