给出前序和中序,如何求二叉树
时间: 2023-06-17 19:06:23 浏览: 72
由先序和中序序列确定二叉树
要根据前序遍历和中序遍历重建二叉树,可以使用递归的方法:
1. 前序遍历的第一个节点为二叉树的根节点;
2. 在中序遍历中找到根节点的位置,它左边的节点为二叉树的左子树,右边的节点为二叉树的右子树;
3. 递归重建左子树和右子树。
这个过程可以用以下代码实现:
```python
class Node:
def __init__(self, val):
self.val = val
self.left = None
self.right = None
def buildTree(preorder, inorder):
if not preorder or not inorder:
return None
root = Node(preorder[0])
root_index = inorder.index(preorder[0])
root.left = buildTree(preorder[1:root_index+1], inorder[:root_index])
root.right = buildTree(preorder[root_index+1:], inorder[root_index+1:])
return root
```
其中 `preorder` 和 `inorder` 分别为前序遍历和中序遍历的列表。这个函数的时间复杂度为 $O(n^2)$,因为每次都要在中序遍历中搜索根节点的位置。如果使用哈希表优化,可以将时间复杂度降为 $O(n)$。
阅读全文