本文已参与「新人创作礼」活动,一起开启掘金创作之路。
257. 二叉树的所有路径
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"] 示例 2:输入:root = [1] 输出:["1"]
提示:
树中节点的数目在范围 [1, 100] 内 -100 <= Node.val <= 100
# 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]:
path = ''
re = []
if not root:
return re
self.getpath(root, path, re)
return re
def getpath(self, cur, path, re):
path += str(cur.val)
if not cur.left and not cur.right:
re.append(path)
if cur.left:
self.getpath(cur.left, path+"->", re)
if cur.right:
self.getpath(cur.right, path+"->", re)
解析
这个题应该算是简单的了吧,但是对于我这个小白来说还是挺难的,因为我对这种递归函数一直处于理解了但又没有完全理解的状态,看别人写感觉我懂了,自己一写就废掉了,怎么递归、怎么结束一直处于懵懵的状态。这算是我继动态规划之后,又遇到的一大类难题了。
这个题定义了一个函数getpath来得到路径,到不存在左节点和右节点的时候结束,并返回路径
具体方法:
1.用re保存所有的路径,path保存路径
2.如果这个树只有一个节点,直接返回
3.如果是根节点,即存在左子树或者右子树,用getpath得到所有的路径
4.getpath函数,不断的向下找子节点,并把这些子节点和path里的值连接在一起。getpath的停止条件是当前节点同时没有左节点和右节点,停止后把path放入re
5.最后输出的是所有满足格式的路径
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/bi…