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)  # 递归遍历右子树
复制代码

 

posted @   Junior_bond  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示