class Node:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
class Tree:
def create_tree(self, pre, mid):
if pre:
root_val = pre[0]
root_val_index_mid = mid.index(root_val)
root = Node(root_val)
root.left = self.create_tree(pre[1:root_val_index_mid+1], mid[:root_val_index_mid])
root.right = self.create_tree(pre[root_val_index_mid+1:], mid[root_val_index_mid+1:])
else:
return None
return root
def print_tree(self, root):
nodes = [root]
while nodes:
node = nodes.pop(0)
print(node.val)
if node.left:
nodes.append(node.left)
if node.right:
nodes.append(node.right)
def mid_series(self, root):
'''中序遍历'''
stack, stack2 = [], []
node = root
while node or stack:
if node:
stack.append(node)
node = node.left
else:
node = stack.pop()
stack2.append(node.val)
node = node.right
print(stack2)
def back_series(self, root):
'''后序遍历'''
stack, stack2 = [root], []
while stack:
node = stack.pop()
stack2.insert(0, node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
print(stack2)
tree = Tree()
root = tree.create_tree(['1', '2', '4', '3', '5', '6'], ['2', '4', '1', '5', '3', '6'])
# tree.print_tree(root)
tree.mid_series(root)
tree.back_series(root)