leetcode day 4 【 045. 二叉树最底层最左边的值】二叉树遍历(DFS)或BFS

在这里插入图片描述

解题思路

  • DFS(先序、中序、后序遍历)

先序遍历二叉树,用一个depth记录当前深度,大于当前最大深度则替换,最后得到的一定是最深且最左边的。【如果题目要问最深且最右边的,就把替换条件从>换成>=】
第一版:进入的时候depth+1,回溯的时候depth-1

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def findBottomLeftValue(self, root: TreeNode) -> int:
        self.depth ,self.max_depth = 0, 0
        self.node = root
        self.PreorderTraversal(root)
        return(self.node.val)

    
    def PreorderTraversal(self, root:TreeNode):
        self.depth = self.depth + 1
        if self.depth > self.max_depth:
            self.max_depth = self.depth
            self.node = root
        if root.left:
            self.PreorderTraversal(root.left)
        if root.right:
            self.PreorderTraversal(root.right)
        self.depth = self.depth - 1

第二版:(尽量少用全局变量)将depth作为参数传入

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def findBottomLeftValue(self, root: TreeNode) -> int:
        self.depth ,self.max_depth = 0, 0
        self.node = root
        self.PreorderTraversal(root,0)
        return(self.node.val)

    
    def PreorderTraversal(self, root:TreeNode, depth:int):
        depth = depth + 1
        if depth > self.max_depth:
            self.max_depth = depth
            self.node = root
        if root.left:
            self.PreorderTraversal(root.left,depth)
        if root.right:
            self.PreorderTraversal(root.right,depth)
  • BFS(层序遍历):用一个循环控制逐层出队列和逐层入队列(不像之前只判断队列是否为空,没有层的分界线)。逐层操作时就可以记录该层的第一个元素。
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def findBottomLeftValue(self, root: TreeNode) -> int:
        q = deque()
        q.append(root)
        while(q):
            lay_lenth = len(q)
            value = q[0].val
            for i in range(lay_lenth):
                node = q.popleft()
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)
        return(value)

全部AC在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值