leetcode513.找左下角的值

直观思路,层序遍历,每层的第一个节点就是最左,取最后一层的第一个就行

from collections import deque
class Solution:
    def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
        que = deque()
        que.append(root)
        while que:
            for i in range(len(que)):
                node = que.popleft()
                if i == 0:
                    self.res = node.val
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
        return self.res

递归法:

中序遍历,向左是优先的(即左端的节点总是先被遍历到)

class Solution:
    def findBottomLeftValue(self, root: Optional[TreeNode]) -> int:
        self.res = 0
        self.maxDepth = 0
        def inorder_traversal(node, depth):
            if not node:
                return
            inorder_traversal(node.left, depth+1)
            #将深度作为递归函数的参数传递,一旦遇到更大深度的节点,就更新信息
            #这个更新的节点一定是左端节点,因为采用的是中序遍历,左节点总是被优先遍历到
            if depth > self.maxDepth:
                self.maxDepth = depth
                self.res = node.val
            inorder_traversal(node.right, depth+1)
        inorder_traversal(root, 1)
        return self.res

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值