104. 二叉树的最大深度

题目描述:

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

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

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

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

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

个人思路:

遇“树”不决,先递归!个人的主要思路是通过递归去寻找叶子结点。当遇到叶子结点时,尝试去更新目前最大深度;不是叶子结点时,再去查找它的左右孩子。关键点是需要维护一个类的属性变量max_depth去记录目前最大的深度。递归问题的思路就是:只考虑目前root结点需要怎么处理,处理完之后,再递归调用左右孩子就行了。

具体代码如下:

# 递归
class Solution:
    def __init__(self):
        self.max_depth = 0
    
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        
        def helper(root, depth):
            if not root:
                return
            if (not root.left) and (not root.right):  # 叶子结点,尝试更新最大深度
                self.max_depth = max(self.max_depth, depth)
                return self.max_depth
            if root.left:
                helper(root.left, depth + 1)
            if root.right:
                helper(root.right, depth + 1)
        
        helper(root, 1)
        return self.max_depth


# 迭代
class Solution:
    def maxDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        
        stack = [(1, root)]
        max_depth = 1
        while stack:
            cur_max_depth, node = stack.pop()
            if (not node.left) and (not node.right):  # 叶子结点,尝试更新最大深度
                max_depth = max(cur_max_depth, max_depth)
            else:
                if node.left:
                    stack.append((cur_max_depth + 1, node.left))
                if node.right:
                    stack.append((cur_max_depth + 1, node.right))
        return max_depth

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值