题目:
给定一个二叉树,返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 输入: 1 / \ 2 3 \ 5 输出: ["1->2->5", "1->3"] 解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3思路: 基本算法就是二叉树的遍历,首先想到的是深度优先遍历。 难点在于,如何实现每个子路径的记录和append binaryTreePaths函数只给了root变量,无法存储每个子路径,考虑写辅助函数res,添加存储路径的变量 res(root,temp) 同时还需要一个全局变量result存储最后的输出结果,result.append(temp)
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def binaryTreePaths(self, root: TreeNode) -> List[str]: def res(root,temp=''): #递归的触底条件 if root.left is None and root.right is None: result.append(temp+str(root.val)) #本次递归所需要做的事情 if root.left:#左不为空,继续向左,保存当前节点的值 res(root.left,temp+str(root.val)+'->') if root.right:#右不为空,继续向右,保存当前节点的值 res(root.right,temp+str(root.val)+"->") if root is None: return [] result=[] res(root,'') return result思路2: 层次遍历
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def binaryTreePaths(self, root: TreeNode) -> List[str]: #层次遍历,利用队列或者栈存储遍历节点,需要注意,因为栈pop的是栈顶元素,所以需要先append #root.right ,再append root.left if not root: return [] res, stack = [], [(root, "")]#建立存储节点和子路径的栈 while stack: node, ls = stack.pop() if not node.left and not node.right: res.append(ls + str(node.val)) if node.right: stack.append((node.right, ls + str(node.val) + "->")) if node.left: stack.append((node.left, ls + str(node.val) + "->")) return res