首页 > 解决方案 > 级别订单树打印输出错误发现

问题描述

我实现了级别顺序树遍历,但是它不会打印出最后两个节点。我非常确信这是一种正确的方法,我想让这种方法发挥作用!有人可以告诉我我在代码中做错了什么吗?

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

import queue

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:        
        q = queue.Queue()
        q.put(root)
        self.level(root, q)

    def level(self, node, q):
        if node == None:
            return
        q.put(node.left)
        q.put(node.right)

        q = self.printyo(q)

        self.level(node.left, q)
        self.level(node.right, q)

    def printyo(self, q):
        if q.empty():
            return
        else:
            node = q.get()
            if node != None:
                print(node.val)
            return q

然而,

Given binary tree [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7

Above code only prints out 

3
9
20

标签: treebinary-treetree-traversal

解决方案


您可以使用额外的打印来打印剩余的节点(您已经为每个函数调用添加了两个节点,因此您还应该在某个时候打印两个;因为您正在使用队列,所以什么时候都没有关系):

def level(self, node, q):
    # ... code unchanged

    self.printyo(q)
    self.printyo(q)

    # ... code unchanged

话虽如此,我建议调整您的逻辑以确保节点按级别顺序打印。迭代工作或在递归中使用一些构造,以确保以广度优先方式填充队列,而不是您在此处使用的深度优先方法。


推荐阅读