【LeetCode 简单题】20-二叉树的最大深度

本文介绍两种求解二叉树最大深度的方法。一种是递归法,通过深度优先搜索左右子树来确定最大深度;另一种是非递归法,采用广度优先搜索逐层遍历节点。递归法直观易懂,非递归法则适用于不熟悉递归或受限于递归深度的情况。

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

声明:

今天是第20道题。给定一个二叉树,找出其最大深度,二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

题目:给定一个二叉树,找出其最大深度,二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

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

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

    3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。

解法1。使用递归,体现的是深度优先分别计算左右子树的深度,比较后返回最大值,代码如下。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        # 这是递归到叶子节点之后没有节点了所以返回给叶子节点0
        if not root:
            return 0
        else:    # 一定要有else语句
            # 算深度时计算的是节点个数,之所以+1是因为需要加上当前层的节点
            left_depth = 1+self.maxDepth(root.left)
            right_depth = 1+self.maxDepth(root.right)
            return max(left_depth,right_depth)

解法2。我没理解……但是能提交成功,就先贴出来吧

class Solution:
    def maxDepth(self, root):

        # V 2.0,能提交
        if root == None:
            return 0

        depth = 0
        q = [root]
        while len(q) != 0:
            depth += 1
            for i in range(0, len(q)):
                if q[0].left:
                    q.append(q[0].left)
                if q[0].right:
                    q.append(q[0].right)
                del q[0]
        return depth

# 简化一下
class Solution:
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        q = [root]
        depth = 0
        while q:
            depth += 1
            for i in range(len(q)):
                node = q.pop(0)
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
        return depth

 

结尾

解法1:https://blog.youkuaiyun.com/littlethunder/article/details/23736491

解法2:https://blog.youkuaiyun.com/coder_orz/article/details/51337420

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值