以非常简单的方式进行 BST 全序遍历
class Node():
def __init__(self,value):
self.value=value
self.left_node=None
self.right_node=None
class BTree():
def __init__(self):
self.root_node=None
self.pre_order_list=[]
def push_element(self,value):
node=Node(value)
if self.root_node is None:
self.root_node=node
return
else:
self.recursion_insert(value,self.root_node)
def recursion_insert(self,value,crnt_node):
node=Node(value)
if node.value<crnt_node.value:
if crnt_node.left_node is None:
crnt_node.left_node=node
elif crnt_node.left_node is not None and node.value>crnt_node.left_node.value:
crnt_node.left_node.right_node=node
else:
self.recursion_insert(value,crnt_node.left_node)
elif node.value>crnt_node.value:
if crnt_node.right_node is None:
crnt_node.right_node=node
elif crnt_node.right_node is not None and node.value<crnt_node.right_node.value:
crnt_node.right_node.left_node=node
else:
self.recursion_insert(value,crnt_node.right_node)
else:
print('Duplicate Values')
def print_preorder_traversal(self):
self.preOrder(self.root_node)
for i in self.pre_order_list:
print(i,end='->')
print('None')
def print_inorder_traversal(self):
self.in_order(self.root_node)
def print_post_order_traversal(self):
self.post_order(self.root_node)
def print_level_order_traversal(self):
self.level_order(self.root_node)
def preOrder(self,crnt_node):
if crnt_node:
self.pre_order_list.append(crnt_node.value)
#print(crnt_node.value,end='->')
self.preOrder(crnt_node.left_node)
self.preOrder(crnt_node.right_node)
def in_order(self,crnt_node):
if crnt_node:
self.in_order(crnt_node.left_node)
print(crnt_node.value,end='->')
self.in_order(crnt_node.right_node)
def post_order(self,crnt_node):
if crnt_node :
self.post_order(crnt_node.left_node)
self.post_order(crnt_node.right_node)
print(crnt_node.value)
def level_order(self,crnt_node):
queue_list=[]
queue_list.append(crnt_node.value)
while queue_list:
if crnt_node.left_node:
queue_list.append(crnt_node.left_node)
if crnt_node.right_node:
queue_list.append(crnt_node.right_node)
queue_list.pop(0)
print(crnt_node.value,end='->')
if queue_list:
crnt_node=queue_list[0]
tree_obj=BTree()
tree_obj.push_element(70)
tree_obj.push_element(31)
tree_obj.push_element(93)
tree_obj.push_element(34)
tree_obj.push_element(14)
tree_obj.push_element(23)
tree_obj.push_element(73)
tree_obj.push_element(94)
#tree_obj.print_preorder_traversal()
#tree_obj.print_inorder_traversal()
#tree_obj.print_post_order_traversal()
tree_obj.print_level_order_traversal()