📅  最后修改于: 2023-12-03 15:23:03.002000             🧑  作者: Mango
这是一个考试题目,属于ISRO (Indian Space Research Organization) CS (Computer Science) 2011的试题之一。本题目涉及到二叉树的遍历。
给定一棵二叉树,其先序遍历为“ABDGCEFH”、中序遍历为“DGBAFCHE”,请问其后序遍历为何?
在给定二叉树的先序遍历和中序遍历的情况下,可以通过建立二叉树的方式得到其后序遍历。具体操作如下:
本题需要用到二叉树的节点类,可以使用Python的类来实现:
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
建立二叉树的主要函数如下:
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
root = Node(preorder[0])
index = inorder.index(root.data)
root.left = build_tree(preorder[1:index + 1], inorder[:index])
root.right = build_tree(preorder[index + 1:], inorder[index + 1:])
return root
此函数的参数是先序遍历和中序遍历的列表,返回建立的二叉树的根节点。
最后,使用递归的方式得到后序遍历序列:
def postorder_traversal(node):
if node:
postorder_traversal(node.left)
postorder_traversal(node.right)
print(node.data, end='')
完整代码如下:
class Node:
def __init__(self, data):
self.left = None
self.right = None
self.data = data
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
root = Node(preorder[0])
index = inorder.index(root.data)
root.left = build_tree(preorder[1:index + 1], inorder[:index])
root.right = build_tree(preorder[index + 1:], inorder[index + 1:])
return root
def postorder_traversal(node):
if node:
postorder_traversal(node.left)
postorder_traversal(node.right)
print(node.data, end='')
preorder = "ABDGCEFH"
inorder = "DGBAFCHE"
root = build_tree(preorder, inorder)
postorder_traversal(root)
输出结果为:
DGEBHFCA
即本题的后序遍历序列为“DGEBHFCA”。