【发布时间】:2016-02-20 05:53:10
【问题描述】:
如何仅使用内置列表从 Python 中的预排序列表构建二叉树(不是二叉搜索树)?预购清单中的每个节点还有一个“标志”,显示它是叶节点还是内部节点。并且每个节点有 2 个孩子(没有 0 或 1 个孩子)
我创建了一个类来表示一个节点
class Node:
def __init__(self, initType):
self.type = initType
self.leftChild = None
self.rightChild = None
我想我应该在这里使用stack,但我不想importstack 库。
我在网上找到的解决方案仅适用于 BST,或者输入由一个中序列表和一个预购列表组成,而不仅仅是预购列表。
【问题讨论】:
-
没有任何“相关”问题有帮助吗? FWIW,您可以使用标准
list作为 LIFO 堆栈:使用.append方法将项目推送到列表中,并使用.pop方法将其再次弹出。 -
或者您可以跳过整个 Node 类并在有序列表上使用索引数学来获取所需的节点。 IE。根节点将是元素 0,根 1 的左孩子,根 2 的右孩子,元素 n - 2*n + 1 的左孩子,元素 n - 2*n + 2 的右孩子。如果孩子的索引更多大于列表的大小,则该子项不存在。
-
这里的预序是指预序遍历,不是预排序列表。
-
这种类型的树称为
complete binary tree(正好有两个节点),请编辑您的问题以指定它。 -
我同意 PM 2Ring,为什么不直接使用
list作为 LIFO 堆栈?
标签: python binary-tree