【发布时间】:2021-07-07 14:10:06
【问题描述】:
class Node:
def __init__(self, data, left=None, right=None):
self.data = data
self.left = left
self.right = right
def inorderTraversal(root):
if root is None:
return
inorderTraversal(root.left)
print(root.data, end=' ')
inorderTraversal(root.right)
def preorderTraversal(root):
if root is None:
return
print(root.data, end=' ')
preorderTraversal(root.left)
preorderTraversal(root.right)
def construct(start, end, preorder, pIndex, dict):
# base case
if start > end:
return None, pIndex
root = Node(preorder[pIndex])
pIndex = pIndex + 1
index = dict[root.data]
root.left, pIndex = construct(start, index - 1, preorder, pIndex, dict)
root.right, pIndex = construct(index + 1, end, preorder, pIndex, dict)
return root, pIndex
def constructTree(inorder, preorder):
dict = {}
for i, e in enumerate(inorder):
dict[e] = i
pIndex = 0
return construct(0, len(inorder) - 1, preorder, pIndex, dict)[0]
if __name__ == '__main__':
inorder = [4, 2, 1, 7, 5, 8, 3, 6]
preorder = [1, 2, 4, 3, 5, 7, 8, 6]
root = constructTree(inorder, preorder)
print("The inorder traversal is ", end='')
inorderTraversal(root)
preorderTraversal(root)
我有这个构造二叉树的代码,但它无法在终端中显示二叉树。很难做到!这里有没有人可以添加一个可以在终端中显示二叉树的方法?
对于上面的例子,它可能看起来像
【问题讨论】:
-
有一个名为
binarytree的库,它将生成随机树,或者您可以提供自己的。它还将在终端中直观地生成它,pypi.org/project/binarytree -
是的,这很难。您可能要考虑以非递归方式执行此操作。您可以创建一个堆栈。对于每个节点,您将其左右子节点添加到堆栈中。然后在某个时候,堆栈的所有元素都属于同一个“级别”(高度)。您弹出并打印所有这些,直到堆栈为空(然后您知道已经打印了一个级别)。你可以先让它简单地在一个新行上打印每个级别,没有任何花哨的斜线。斜线和空格/缩进是更难的部分
-
看看这个geeksforgeeks.org/print-level-order-traversal-line-line。除非你真的需要斜线,否则就这样吧
-
这感觉像是一项家庭作业,查看此链接以获取有关二叉树的更多信息medium.com/@ajinkyajawale/…
标签: python binary-tree inorder preorder