利用前序和中序遍历构建二叉树的递归算法python
时间: 2023-11-22 15:04:57 浏览: 83
以下是利用前序和中序遍历构建二叉树的递归算法 Python 实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(preorder: List[int], inorder: List[int]) -> TreeNode:
if not preorder or not inorder:
return None
root = TreeNode(preorder[0])
pos = inorder.index(preorder[0])
root.left = buildTree(preorder[1:pos+1], inorder[:pos])
root.right = buildTree(preorder[pos+1:], inorder[pos+1:])
return root
```
其中,`preorder` 表示前序遍历序列,`inorder` 表示中序遍历序列,返回值是构建出的二叉树的根节点。在实现中,首先判断 `preorder` 和 `inorder` 是否为空,如果为空则返回 `None`。然后,根据前序遍历的第一个元素找到根节点,并在中序遍历中找到根节点的位置。接下来,通过切片的方式递归处理左子树和右子树,分别构建出左子树和右子树的二叉树。最后,将根节点与左子树和右子树的根节点连接起来,构建出整个二叉树。
需要注意的是,在 Python 中,切片时结束位置是不包含在切片中的,因此 `preorder[1:pos+1]` 表示的是前序遍历序列中除了根节点以外的左子树部分,`inorder[:pos]` 表示的是中序遍历序列中根节点左边的部分。同理,`preorder[pos+1:]` 表示的是前序遍历序列中除了根节点以外的右子树部分,`inorder[pos+1:]` 表示的是中序遍历序列中根节点右边的部分。
阅读全文