leedcode-二叉树的所有路径
迭代法-深度优先搜索(栈)
class Solution: def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]: if not root: return [] # 如果根节点为空,直接返回空列表 stack = [(root, str(root.val))] # 初始化栈,栈中存储的是节点和对应的路径 res = [] # 用于存储所有路径 while stack: cur, path = stack.pop() # 弹出栈顶节点及其对应的路径 if not cur.left and not cur.right: # 如果当前节点是叶子节点 res.append(path) # 将当前路径添加到结果列表中 if cur.right: # 如果右子节点存在,则将右子节点及路径入栈 stack.append((cur.right, path + "->" + str(cur.right.val))) if cur.left: # 如果左子节点存在,则将左子节点及路径入栈 stack.append((cur.left, path + "->" + str(cur.left.val))) return res # 返回所有路径列表
递归:
class Solution: def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]: res = [] # 用于存储所有路径 path = "" # 当前路径字符串 self.getPath(res, path, root) # 调用递归函数获取所有路径 return res # 返回所有路径列表 def getPath(self, res, path, root): if not root: return # 如果当前节点为空,直接返回 path += str(root.val) # 将当前节点的值添加到路径字符串中 if not root.left and not root.right: # 如果当前节点是叶子节点 res.append(path) # 将当前路径添加到结果列表中 else: path += "->" # 如果当前节点不是叶子节点,则在路径字符串后添加箭头符号 self.getPath(res, path, root.left) # 递归遍历左子树 self.getPath(res, path, root.right) # 递归遍历右子树
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)