本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
一、题目描述
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
示例 1 :
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
二、思路分析
这道题最直观的方法是使用深度优先搜索(DFS)。在深度优先搜索(DFS)遍历二叉树时,我们需要考虑当前的节点以及它的孩子节点。
- 如果当前节点
不是叶子节点,则在当前的路径末尾添加该节点,并继续递归遍历该节点的每一个孩子节点。 - 如果当前节点
是叶子节点,则在当前路径末尾添加该节点后我们就得到了一条从根节点到叶子节点的路径,将该路径加入到答案即可。
三、AC 代码
class Solution:
def binaryTreePaths(self, root):
def construct_paths(root, path):
if root:
path += str(root.val)
if not root.left and not root.right:
paths.append(path)
else:
path += '->'
construct_paths(root.left, path)
construct_paths(root.right, path)
paths = []
construct_paths(root, '')
return paths
输出为:
四、总结
该题是一道利用深度优先搜索(DFS)实现代码的题。从这道题体会到,理论很简单,思路需打开。在解决二叉树问题的时候可以优先想到用深度优先搜索(DFS)的方式进行解答。