[剑指Offer] 55_二叉树的深度

本文深入探讨了二叉树的深度计算方法及平衡二叉树的判断标准,通过深度优先遍历和层次遍历算法,解析了二叉树深度的计算,并介绍了平衡二叉树的概念及其判断条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目1:二叉树的深度

输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点一次经过的节点形成树的一条路径,从最长路径的长度为树的深度。

例:

        1
       / \
      2   3
     / \   \
    4   5   6
       /
      7
深度为4。

思路

  1. 深度优先遍历,返回当前子树深度。H(root) = max(H(root.left), H(root.right)) + 1。
    1. 时间复杂度:O(n)
    2. 空间复杂度:O(n)
  2. 层次遍历,记录层数。
    1. 时间复杂度:O(n)
    2. 空间复杂度:O(n)

代码

思路1:时间复杂度:O(n),空间复杂度:O(n)

def depth_of_tree(root):
    """    
    :param root: tree root
    :return: height of tree 
    """
    if not root:
        return 0
    left = depth_of_tree(root.left)
    right = depth_of_tree(root.right)
    return max(left, right) + 1

题目2:平衡二叉树

输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左、右子树的深度相差不超过1,
那么它就是一棵平衡二叉树。


思路

  1. 同理题目1,返回深度判断是否相差为1即可。
    1. 时间复杂度:O(n)
    2. 空间复杂度:O(n)

代码

思路1:时间复杂度:O(n),空间复杂度:O(n)

def is_balanced(root):
    """
    :param root:binary tree root
    :return: is balanced
    """
    def core(root):
        if not root:
            return 0
        left = core(root.left)
        right = core(root.right)
        if left == -1 or right == -1 or abs(left - right) > 1:
            return -1
        else:
            return 1 + max(left, right)

    return core(root) != -1

思考

相同的题目

LeetCode 104. 二叉树的最大深度

给定一个二叉树,找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。

代码(思路2)

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root:
            search = [root]
        else:
            return 0
        count = 0
        while search:
            layer = search[:]
            for node in layer:                
                if node.left:
                    search.append(node.left)
                if node.right:
                    search.append(node.right)
                search.pop(0)
            # print(search)
            count += 1
        return count

相同的题目

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 。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值