第一行一个整数 n,表示二叉树的大小。
第二行 n 个整数 a_i,表示二叉树的先序遍历数组。
第三行 n 个整数 b_i,表示二叉树的中序遍历数组。
输出一行 n 个整数表示二叉树的后序遍历数组。
3 1 2 3 2 1 3
2 3 1
数据保证合法
利用的是根据前序和中序还原树的思路求解的该问题,从右向左还原后序遍历数组
def setPos(preorder, inorder, posorder, si): if len(inorder)==0&nbs***bsp;si < 0: return si data = preorder[0] mid = inorder.index(data) posorder[si] = data si = si-1 si = setPos(preorder[mid+1:], inorder[mid+1:], posorder, si) si = setPos(preorder[1:mid+1], inorder[0:mid], posorder, si) return si n = int(input()) prorder = list(map(int, input().split())) inorder = list(map(int, input().split())) posorder = n*[''] s = setPos(prorder, inorder, posorder, n-1) for i in range(n): print(posorder[i], end=' ')
class Node(): def __init__(self, x, left=None, right=None): self.val = x self.left = left self.right = right class Tree(): def reConstructBinaryTree(self, pre, tin): if len(pre) == 0: return root = Node(pre[0]) TinIndex = tin.index(pre[0]) root.left = self.reConstructBinaryTree(pre[1: TinIndex+1], tin[0: TinIndex]) root.right = self.reConstructBinaryTree(pre[TinIndex+1:], tin[TinIndex+1:]) return root def PostTraversal(self, root): list1 = [] if root != None: self.PostTraversal(root.left) self.PostTraversal(root.right) list1.append(root.val) print(root.val, end=' ') if __name__ == '__main__': num = int(input()) pre = list(map(int, input().split())) tin = list(map(int, input().split())) S = Tree() root = S.reConstructBinaryTree(pre, tin) S.PostTraversal(root)