二叉树——二叉树所有路径、112. 路径总和、513. 找树左下角的值

二叉树所有路径

给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
在这里插入图片描述

输入:root = [1,2,3,null,5]
输出:["1->2->5","1->3"]

重点:

  1. 通过前序遍历,将所有节点串联,并且递归自带隐式回溯
  2. 终止条件if not root.left and not root.right:
  3. 递归函数参数以及返回值的确定 def dfs(root, path):
# 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 binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        res = []
        # 递归函数参数以及返回值
        def dfs(root, path):
            if not root:
                return []
            if root:
                path += str(root.val)
                # 终止条件
                if not root.left and not root.right:
                    res.append(path)
                else:
                    # 单层递归
                    path += '->'
                    dfs(root.left, path)
                    dfs(root.right, path)
        dfs(root, "")
        return res
路径总和

给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。

叶子节点 是指没有子节点的节点。
示例 1
在这里插入图片描述

输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示
# 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 hasPathSum(self, root: Optional[TreeNode], targetSum: int) -> bool:
        #  如果树为空,返回 False
        if not root:
            return False

        #  如果当前节点为叶子节点,且叶子节点的值等于该路径之前节点的值,返回True
        if not root.left and not root.right and root.val == targetSum:
            return True    
        #  递归左子树
        leftPath = self.hasPathSum(root.left, targetSum - root.val)
        #  递归右子树
        rightPath = self.hasPathSum(root.right, targetSum - root.val)
        
        return leftPath or rightPath
找树左下角的值

给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。

假设二叉树中至少有一个节点。
示例 1:
在这里插入图片描述

输入: [1,2,3,4,null,5,6,null,null,7]
输出: 7
# 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: Optional[TreeNode]) -> int: 
        queue = collections.deque([root])
        while queue:
            cur = queue.popleft()
            if cur.right: 
                queue.append(cur.right)
            if cur.left:
                queue.append(cur.left)
        return cur.val
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值