2022跟着leedcode学数据结构--第20天

90 阅读1分钟

「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战

image.png

[二叉树的右视图]

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

示例 1:

image.png

输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2:

输入: [1,null,3] 输出: [1,3] 示例 3:

输入: [] 输出: []  

提示:

二叉树的节点个数的范围是 [0,100] -100 <= Node.val <= 100 

解题思路:

  • 碰到这样的题第一时间想到深度优先遍历 广度优先遍历
  • 根据题意想要得到右侧所有节点,所以这里就用深度优先遍历方法
  • 判断是否是右侧节点,放入res
# 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 rightSideView(self, root: TreeNode) -> List[int]:
        res = []
        self.dfs(root, 0, res)
        return res
    def dfs(self,root, row, res):
        if not root:
            return 
        if len(res) <= row:
            res.append(0)
        res[row] = root.val
        self.dfs(root.left, row + 1,res)
        self.dfs(root.right, row + 1,res)

执行结果:

image.png

[路径总和 II]

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。

叶子节点 是指没有子节点的节点。

 

示例 1:

image.png

输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22 输出:[[5,4,11,2],[5,8,4,5]] 示例 2:

image.png

输入:root = [1,2,3], targetSum = 5 输出:[] 示例 3:

输入:root = [1,2], targetSum = 0 输出:[]  

提示:

树中节点总数在范围 [0, 5000] 内 -1000 <= Node.val <= 1000 -1000 <= targetSum <= 1000

解题思路:

  • 这个题思路和上面的题思路一致,都是dfs深度遍历
  • 编写dfs方法,和上面一样,这里只是改变了一些判断条件
# 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 pathSum(self, root: Optional[TreeNode], targetSum: int) -> List[List[int]]:
        res = []
        self.dfs(root, [], targetSum,res)
        return res
    def dfs(self,root, tmp, targetSum,res):
        if not root:
            return 
        if not root.left and not root.right and targetSum - root.val == 0:
            tmp += [root.val]
            res.append(tmp)
        self.dfs(root.left, tmp + [root.val], targetSum - root.val,res)
        self.dfs(root.right, tmp + [root.val], targetSum - root.val,res)

执行结果:

image.png