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 。

提示:

  1. 节点总数 <= 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)
};
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

cos 微信支付

微信支付

cos 支付宝

支付宝