《Leetcode of September 》257.二叉树所有路径

46 篇文章 0 订阅
15 篇文章 0 订阅

采用两个方法去解决:

1、DFS(其实就是回溯算法)

2、BFS (相当于把所以节点显示的枚举出来)

 

# 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]:
        if not root:
            return []

        #BFS
        queue = collections.deque()
        #将根节点和根节点的值都放入队列中
        queue.append([root,[str(root.val)]])
        res = []
        while queue:
            #弹出节点和其结果信息
            node,temp = queue.popleft()
            
            #如果这个节点是根节点,那么就添加到结果列表中
            if not node.left and not node.right:
                res.append('->'.join(temp))
            #如果左子树存在,那么再队列添加更新队列的信息和path的信息;右子树同理可得
            if node.left:
                queue.append([node.left,temp+[str(node.left.val)]])
            if node.right:
                queue.append([node.right,temp+[str(node.right.val)]])
        
        return res



        #DFS 其实就是回溯算法,不过回溯算法用了一个列表,需要执行一个弹出操作
        #我再写的时候没有再递归的时候调用subset的信息,所以出错。
        #递归底层就是一个栈,所以要试探选择所有可能性必须要同步更新消息
        def DFS(root, subset):
            if root:
                subset += str(root.val)
                #如果为叶子节点那就直接添加到结果集中去
                if not root.left and not root.right:
                    result.append(subset)
                
                else:
                    subset += '->'
                    DFS(root.left, subset)
                    DFS(root.right, subset)

        result = []
        DFS(root, '')
        
        return result 

 总结:二叉树的问题往往都是DFS和BFS是可以相互转换的,再DFS中栈的思路一定再脑子中,这样才能把很多问题都能进行建模。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值