1. 题目:
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5]
输出:[“1->2->5”,“1->3”]
示例 2:
输入:root = [1]
输出:[“1”]
2. 我的代码:
# 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 = []
result = []
# 递归 + 回溯
def traceBack(node):
# 终止条件
if node == None:
return 0
path.append(str(node.val))
if node.left == None and node.right == None:
result.append(path[:])
elif node.left == None:
traceBack(node.right)
elif node.right == None:
traceBack(node.left)
else:
traceBack(node.left)
traceBack(node.right)
path.pop()
traceBack(root)
return ["->".join(i) for i in result]
二叉树求解所有路径,需要记录路径,这就想到了回溯,其实回溯无处不在。回溯和递归是相辅相成的,有递归的地方就可以加回溯。一个path.append()
放在前面,一个path.pop()
放在后面。
递归要分很多情况,如果此节点是叶子节点,则把路径的副本传入结果列表中;如果左节点是空,则去递归右节点;如果右节点是空,则去递归左节点;如果左右节点都不为空,则按后序遍历顺序遍历。
最后用["->".join(i) for i in result]
将结果列表中的列表元素变为字符串形式
小结:
关注我给大家分享更多有趣的知识,以下是个人公众号,提供 ||代码兼职|| ||代码问题求解||
添加我的公众号即可: