azl397985856/leetcode

leetcode-thinkings-tree.md BFS 模版调整

likenow opened this issue · 3 comments

class Solution:
    def bfs(k):
        # 使用双端队列,而不是数组。因为数组从头部删除元素的时间复杂度为 N,双端队列的底层实现其实是链表。
        queue = collections.deque([root])
        # 记录层数
        steps = 0
        # 需要返回的节点
        ans = []
        # 队列不空,生命不止!
        while queue:
            size = len(queue)
            # 遍历当前层的所有节点
            for _ in range(size):
                node = queue.popleft()
                if (step == k) ans.append(node)
                if node.right:
                    queue.append(node.right)
                if node.left:
                    queue.append(node.left)
            # 遍历完当前层所有的节点后 steps + 1
            steps += 1
        return ans

上述模版,入队的顺序调整为:


class Solution:
    def bfs(k):
       ...
            for _ in range(size):
                ...

                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
                
            # 遍历完当前层所有的节点后 steps + 1
            steps += 1
        return ans

您好,您的来信已收到,我会尽快给您回复的!

sorry, submitted to a wrong issues category.

bfs 不同于 dfs, dfs 会区分先序,中序和后序,因此 bfs 在这里 left 和 right 的顺序没有大的影响。