class Node(object):
"""节点类"""
def __init__(self, elem=-1, lchild=None, rchild=None):
self.elem = elem
self.lchild = lchild
self.rchild = rchild
class Tree(object):
"""树类"""
def __init__(self):
self.root = Node()
self.myQueue = []
def add(self, elem):
"""为树添加节点"""
node = Node(elem)
if self.root.elem == -1: # 如果树是空的,则对根节点赋值
self.root = node
self.myQueue.append(self.root)
else:
treeNode = self.myQueue[0] # 此结点的子树还没有齐。
if treeNode.lchild == None:
treeNode.lchild = node
self.myQueue.append(treeNode.lchild)
else:
treeNode.rchild = node
self.myQueue.append(treeNode.rchild)
self.myQueue.pop(0) # 如果该结点存在右子树,将此结点丢弃。
def PreOrderTree(self, root,x):
"""利用递归实现树的先序遍历"""
if root == None:
return
x.append(root.elem)
self.PreOrderTree(root.lchild,x)
self.PreOrderTree(root.rchild,x)
def Find(self, root,elem1):
if root == None:
return
myStack = []
node = root
while node or myStack:
while node:
myStack.append(node)
node = node.lchild
node = myStack.pop()
if elem1 == node.elem:
return node
node = node.rchild
def insert(self,root,node):
if root.lchild == None:
root.lchild = node
else:
root.rchild = node
def LaOrderTree(self, root,z):
"""利用递归实现树的后序遍历"""
if root == None:
return
self.LaOrderTree(root.lchild,z)
self.LaOrderTree(root.rchild,z)
z.append(root.elem)
def InOrderTree(self,root,y):
"""利用堆栈实现树的中序遍历"""
if root == None:
return
myStack = []
node = root
while node or myStack:
while node:
myStack.append(node)
node = node.lchild
node = myStack.pop()
y.append(node.elem)
node = node.rchild
if __name__ == '__main__':
"""主函数"""
x = []
y = []
z = []
tree = Tree()
while True:
q = int(input())
if q == 1:
n = int(input())
if n == 1:
tree.add(0)
if n > 1:
for i in range(n - 1):
A = []
A = list(map(int, input().split()))
if i == 0:
tree.add(A[0])
if tree.Find(tree.root, A[0]) is None:
break
tree.insert(tree.Find(tree.root, A[0]), Node(A[1]))
if q == 2:
tree.PreOrderTree(tree.root, x)
s = str(x[0])
for i in x[1::]:
s += ' ' + str(i)
print(s)
if q == 3:
tree.InOrderTree(tree.root, y)
s = str(y[0])
for i in y[1::]:
s += ' ' + str(i)
print(s)
if q == 4:
tree.LaOrderTree(tree.root, z)
s = str(z[0])
for i in z[1:]:
s += ' ' + str(i)
print(s)
if q == 0:
break