编写代码用先序遍历和中序遍历创建二叉树
时间: 2024-03-05 14:50:44 浏览: 83
根据先序和中序遍历序列构建二叉树
好的,下面是用先序遍历和中序遍历创建二叉树的代码:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def build_tree(preorder, inorder):
if not preorder or not inorder:
return None
# 先序遍历的第一个节点即为当前树的根节点
root = TreeNode(preorder[0])
# 找到根节点在中序遍历中的位置
root_idx = inorder.index(preorder[0])
# 递归构建左子树和右子树
root.left = build_tree(preorder[1:root_idx+1], inorder[:root_idx])
root.right = build_tree(preorder[root_idx+1:], inorder[root_idx+1:])
return root
```
其中,`preorder`表示先序遍历结果,`inorder`表示中序遍历结果。我们先判断先序遍历和中序遍历结果是否为空,为空则返回`None`。然后,我们取先序遍历结果的第一个节点作为根节点,找到根节点在中序遍历结果中的位置,然后递归构建左子树和右子树。
例如,给定先序遍历结果`[3,9,20,15,7]`和中序遍历结果`[9,3,15,20,7]`,我们可以这样构建二叉树:
```
3
/ \
9 20
/ \
15 7
```
代码演示:
```python
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
root = build_tree(preorder, inorder)
print(root.val) # 3
print(root.left.val) # 9
print(root.right.val) # 20
print(root.right.left.val) # 15
print(root.right.right.val) # 7
```
阅读全文