tree - 级别订单树打印输出错误发现
问题描述
我实现了级别顺序树遍历,但是它不会打印出最后两个节点。我非常确信这是一种正确的方法,我想让这种方法发挥作用!有人可以告诉我我在代码中做错了什么吗?
# 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
解决方案
您可以使用额外的打印来打印剩余的节点(您已经为每个函数调用添加了两个节点,因此您还应该在某个时候打印两个;因为您正在使用队列,所以什么时候都没有关系):
def level(self, node, q):
# ... code unchanged
self.printyo(q)
self.printyo(q)
# ... code unchanged
话虽如此,我建议调整您的逻辑以确保节点按级别顺序打印。迭代工作或在递归中使用一些构造,以确保以广度优先方式填充队列,而不是您在此处使用的深度优先方法。
推荐阅读
- css - 平稳过渡
- php - Bootstrap 8.x-3.10 对话框格式错误,带 Drupal
- android - AdMob - 示例广告有效,我自己的插页式广告无效
- java - 使用 JSON 值的存储过程不遍历 java 中的对象数组值
- postgresql - 有什么方法可以重命名 PostgreSQL 默认操作符名称?例如,将 EXCEPT 运算符改为 MINUS。这是可行的吗?
- python - Pygame - 零除法错误:浮点除以零
- html - 在浏览器打印机版本中将谷歌图表居中
- javascript - 删除 json_encode 中的双引号
- sql-server - 来自 T-SQL 查询的 Active Directory 更新脚本
- node.js - 我的 nodeJS 应用程序正在发送可疑的 GET/POST 请求。我有病毒吗?