假设二叉树采用二叉链存储,每个结点值为单个字符,并且所有结点值不相同。python编写一个实验程序,由二叉树的中序序列和后序序列构造二叉树,实现查找、求高度、先序遍历、中序遍历、后序遍历算法和层次遍历算法,用相关数据进行测试,包括主程序
时间: 2024-02-06 19:11:35 浏览: 78
好的,以下是实验程序的 Python 实现。首先,我们需要定义二叉树结点的类:
```python
class TreeNode:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
```
接下来,我们可以编写构造二叉树的函数:
```python
def buildTree(inorder: List[str], postorder: List[str]) -> TreeNode:
if not inorder or not postorder:
return None
root_val = postorder[-1]
root = TreeNode(root_val)
idx = inorder.index(root_val)
inorder_left = inorder[:idx]
inorder_right = inorder[idx+1:]
postorder_left = postorder[:idx]
postorder_right = postorder[idx:-1]
root.left = buildTree(inorder_left, postorder_left)
root.right = buildTree(inorder_right, postorder_right)
return root
```
该函数的参数是二叉树的中序序列和后序序列,返回值是构造出的二叉树的根结点。我们可以先根据后序序列找到根结点的值,然后在中序序列中找到该值的位置,这样可以将中序序列分为左子树部分和右子树部分。接着,我们可以将后序序列也分为左子树部分和右子树部分,然后分别递归构造左子树和右子树。
接下来,我们可以实现各种遍历算法和求高度算法:
```python
def height(root: TreeNode) -> int:
if not root:
return 0
return max(height(root.left), height(root.right)) + 1
def preorderTraversal(root: TreeNode) -> None:
if not root:
return
print(root.val, end=' ')
preorderTraversal(root.left)
preorderTraversal(root.right)
def inorderTraversal(root: TreeNode) -> None:
if not root:
return
inorderTraversal(root.left)
print(root.val, end=' ')
inorderTraversal(root.right)
def postorderTraversal(root: TreeNode) -> None:
if not root:
return
postorderTraversal(root.left)
postorderTraversal(root.right)
print(root.val, end=' ')
def levelTraversal(root: TreeNode) -> None:
if not root:
return
q = [root]
while q:
size = len(q)
for _ in range(size):
cur = q.pop(0)
print(cur.val, end=' ')
if cur.left:
q.append(cur.left)
if cur.right:
q.append(cur.right)
print()
```
最后是主函数:
```python
if __name__ == '__main__':
inorder = ['D', 'B', 'E', 'A', 'F', 'C']
postorder = ['D', 'E', 'B', 'F', 'C', 'A']
root = buildTree(inorder, postorder)
print('Height:', height(root))
print('Preorder traversal:', end=' ')
preorderTraversal(root)
print()
print('Inorder traversal:', end=' ')
inorderTraversal(root)
print()
print('Postorder traversal:', end=' ')
postorderTraversal(root)
print()
print('Level traversal:')
levelTraversal(root)
```
在这个例子中,我们使用中序序列 `['D', 'B', 'E', 'A', 'F', 'C']` 和后序序列 `['D', 'E', 'B', 'F', 'C', 'A']` 来构造二叉树,并测试各种遍历算法和求高度算法。
阅读全文