1)给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历, inorder是同一棵树的中序遍历,请构造二叉树并返回其根节点。
时间: 2024-06-14 13:04:27 浏览: 195
以下是给定两个整数数组preorder和inorder构造二叉树的步骤:
1. 首先,我们需要确定根节点。根据先序遍历的特点,preorder数组的第一个元素就是根节点的值。
2. 接下来,我们需要在inorder数组中找到根节点的位置。根据中序遍历的特点,根节点的左边是左子树的中序遍历结果,根节点的右边是右子树的中序遍历结果。
3. 然后,我们可以根据根节点在inorder数组中的位置,将preorder数组分成左子树的先序遍历结果和右子树的先序遍历结果。
4. 接着,我们可以递归地构造左子树和右子树。对于左子树,我们可以使用左子树的先序遍历结果和中序遍历结果进行递归构造;对于右子树,我们可以使用右子树的先序遍历结果和中序遍历结果进行递归构造。
5. 最后,我们将左子树和右子树连接到根节点上,构造出完整的二叉树。
下面是一个示例代码,演示了如何根据给定的preorder和inorder数组构造二叉树并返回其根节点:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def buildTree(preorder, inorder):
if not preorder or not inorder:
return None
# 根节点的值为preorder的第一个元素
root_val = preorder[0]
root = TreeNode(root_val)
# 在inorder中找到根节点的位置
root_index = inorder.index(root_val)
# 构造左子树的先序遍历结果和中序遍历结果
left_preorder = preorder[1:root_index+1]
left_inorder = inorder[:root_index]
# 构造右子树的先序遍历结果和中序遍历结果
right_preorder = preorder[root_index+1:]
right_inorder = inorder[root_index+1:]
# 递归构造左子树和右子树
root.left = buildTree(left_preorder, left_inorder)
root.right = buildTree(right_preorder, right_inorder)
return root
# 示例输入
preorder = [3,9,20,15,7]
inorder = [9,3,15,20,7]
# 构造二叉树并返回根节点
root = buildTree(preorder, inorder)
```
阅读全文