1
我想做一個函數,使用我的ListBinaryTree:類來構造和打印二叉樹,基於作爲輸入提示的inorder和preorder遍歷(以字符串形式,例如。 Inorder = 213,Preorder = 123)。我二叉樹類如下:Python:二叉樹類:用遍歷重建
class ListBinaryTree:
"""A binary tree class with nodes as lists."""
DATA = 0 # just some constants for readability
LEFT = 1
RIGHT = 2
def __init__(self, root_value, left=None, right=None):
"""Create a binary tree with a given root value
left, right the left, right subtrees
"""
self.node = [root_value, left, right]
def create_tree(self, a_list):
return ListBinaryTree(a_list[0], a_list[1], a_list[2])
def insert_value_left(self, value):
"""Inserts value to the left of this node.
Pushes any existing left subtree down as the left child of the new node.
"""
self.node[self.LEFT] = ListBinaryTree(value, self.node[self.LEFT], None)
def insert_value_right(self, value):
"""Inserts value to the right of this node.
Pushes any existing left subtree down as the left child of the new node.
"""
self.node[self.RIGHT] = ListBinaryTree(value, None, self.node[self.RIGHT])
def insert_tree_left(self, tree):
"""Inserts new left subtree of current node"""
self.node[self.LEFT] = tree
def insert_tree_right(self, tree):
"""Inserts new left subtree of current node"""
self.node[self.RIGHT] = tree
def set_value(self, new_value):
"""Sets the value of the node."""
self.node[self.DATA] = new_value
def get_value(self):
"""Gets the value of the node."""
return self.node[self.DATA]
def get_left_subtree(self):
"""Gets the left subtree of the node."""
return self.node[self.LEFT]
def get_right_subtree(self):
"""Gets the right subtree of the node."""
return self.node[self.RIGHT]
def __str__(self):
return '['+str(self.node[self.DATA])+', '+str(self.node[self.LEFT])+', '+\
str(self.node[self.RIGHT])+']'
到目前爲止,我有以下幾點:
def reconstruct():
inorder = input("Please enter the inorder sequence:")
preorder = input("Please enter the preorder sequence:")
#root = preorder[0]
#left_bottom = inorder[0]
#right_bottom = inorder[len(inorder)-1]
my_tree = ListBinaryTree(int(preorder[0]))
my_tree.insert_tree_left(int(inorder[0]))
my_tree.insert_tree_right(int(inorder[len(inorder)-1]))
print (my_tree)
但它僅適用於與1級或2級樹: 輸出的一個例子是:
調用函數
reconstruct()
提示:
Please enter the inorder sequence:213
Please enter the preorder sequence:123
打印結果:
[1, 2, 3]
如何更改我的功能,使其可以構建一個樹/遍歷理論上無限量更高的水平?
重新構建()僅僅是一個單獨的功能上ListBinaryTree類調用。這個對我有用。你只需要調用函數:reconstruct()並提示遍歷。我不明白你將如何實現遞歸。它讓我感到困惑 – Newbie
有沒有你遇到過的遞歸的一個方面,或者是遞歸概念的一個普遍問題?如果這是一個普遍問題,那麼我建議你查找一個關於遞歸的教程,或者找一個理解的朋友;通過文本解釋整個想法超出了StackOverflow的範圍。如果這只是一個特定的問題,那麼請問一個後續問題,因爲這對於作業至關重要。 – Prune
您使用的是什麼版本的Python?這可能是不同之處。 – Prune