1、设一棵二叉树以二叉链表表示,实现由后序、中序序列构造二叉树的算法。
时间: 2024-11-25 19:13:20 浏览: 4
建立二叉树,并输出二叉树的先序,中序和后序遍历序列,以及二叉树的叶子数
要从后序遍历(post)和中序遍历(in)序列构建二叉树,可以利用递归的方法。以下是核心的Python代码实现:
```python
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def buildTree(post, in_, i, j):
if i > j or i > len(post) or j > len(in_):
return None
root_val = post[j]
root = TreeNode(root_val)
# 找到根节点在中序遍历中的位置
index = in_.index(root_val)
# 分别对左子树和右子树递归调用,调整索引
root.left = buildTree(post, in_, i, index - 1)
root.right = buildTree(post, in_, index + 1, j - 1)
return root
# 示例用法
post = "s1 t1" # 后序遍历,这里假设是字符串形式,实际应转换为整数列表
in_ = "s2 t2" # 中序遍历,同样假设是字符串形式,实际应转换为整数列表
root = buildTree(post.split(), in_.split(), 0, len(post.split()) - 1)
# 构建完成后,可以递归计算并输出先序、中序和后序遍历
def inorder_traversal(node, result=None):
if node is not None:
inorder_traversal(node.left, result)
result.append(node.val)
inorder_traversal(node.right, result)
preorder = []
inorder = []
postorder = []
inorder_traversal(root, preorder)
inorder_traversal(root, inorder)
postorder = [val for val in inorder[::-1]]
```
阅读全文