「这是我参与2022首次更文挑战的第20天,活动详情查看:2022首次更文挑战」
[二叉树的右视图]
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [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)
执行结果:
[路径总和 II]
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入: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:
输入: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)
执行结果: