给你一个二叉树的根节点 root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。
叶子节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3,null,5] 输出:["1->2->5","1->3"]
示例 2:
输入:root = [1] 输出:["1"]
思路:要找到二叉树从根节点到每个叶子节点的所有路径,那肯定需要用到回溯,回溯的两大要点就是if终止条件和for循环。
关于if终止条件:什么时候终止呢,就是遍历到叶子节点呗,一条路径找完了就终止,也就是该结点没有左右孩子了,就终止。
关于for循环:我们要找到所有路径,因此先用个数组ways保存该结点的左右孩子,然后for循环对这个数组进行回溯。
代码(Python):
class Solution(object):
def binaryTreePaths(self, root):
result = []
path = []
def backtracking(node,path): #回溯
if not node:
return
path.append(node.val) #根节点放入
if not node.left and not node.right: #若遍历到叶子结点
result.append('->'.join(map(str, path)))
return
ways = []
if node.left:
ways.append(node.left)
if node.right:
ways.append(node.right)
for way in ways:
backtracking(way,path)
path.pop()
backtracking(root,path)
return result