解题思路:
注意事项:
参考代码:
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
# 根节点为先序遍历的第一个元素
root_val = preorder[0]
root = TreeNode(root_val)
# 在中序遍历中找到根节点的索引
root_index = inorder.index(root_val)
# 切分左子树的中序遍历序列和右子树的中序遍历序列
left_inorder = inorder[:root_index]
right_inorder = inorder[root_index + 1:]
# 切分左子树的先序遍历序列和右子树的先序遍历序列
left_preorder = preorder[1:1 + len(left_inorder)]
right_preorder = preorder[1 + len(left_inorder):]
# 递归构建左子树和右子树
root.left = build_tree(left_preorder, left_inorder)
root.right = build_tree(right_preorder, right_inorder)
return root
def postorder_traversal(root):
if not root:
return []
result = []
# 递归后序遍历左子树
result.extend(postorder_traversal(root.left))
# 递归后序遍历右子树
result.extend(postorder_traversal(root.right))
# 将根节点加入结果列表
result.append(root.val)
return result
# 定义二叉树节点类
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 读取输入
preorder = input().strip()
inorder = input().strip()
# 构建二叉树
root = build_tree(preorder, inorder)
# 后序遍历
result = postorder_traversal(root)
# 输出结果
print(''.join(result))
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复