请你用C++写一串代码,实现根据二叉树的前序和中序输入构建二叉树,二叉树结点用链表储存
时间: 2024-12-18 21:33:53 浏览: 17
在C++中,我们可以使用递归的方式来实现根据前序遍历和中序遍历来构建二叉树。首先,我们需要一个节点结构体,然后定义两个函数:`buildTree`用于构建二叉树,以及辅助的`preorder`和`inorder`函数分别处理前序和中序遍历。
```cpp
#include <iostream>
using namespace std;
// 节点结构体
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 前序遍历(根-左-右)
TreeNode* preorder(int val, vector<int>& preOrder, vector<int>& inOrder, int start, int end) {
if (start > end)
return nullptr;
// 根据前序找到当前节点的位置
int rootIndex = find(preOrder.begin(), preOrder.end(), val) - preOrder.begin();
TreeNode* root = new TreeNode(val);
// 使用中序遍历确定左右子树边界
int iStart = lower_bound(inOrder.begin() + start, inOrder.begin() + end + 1, val) - inOrder.begin();
int iEnd = (iStart == end + 1 ? end : iStart);
// 构建左右子树并连接
root->left = preorder(val, preOrder, inOrder, start, iStart - 1);
root->right = preorder(val, preOrder, inOrder, iEnd, end);
return root;
}
// 根据前序和中序遍历重建二叉树
TreeNode* buildTree(vector<int>& preOrder, vector<int>& inOrder) {
return preorder(preOrder[0], preOrder, inOrder, 0, inOrder.size() - 1);
}
int main() {
// 示例输入
vector<int> preOrder = {1, 2, 4, 5, 3};
vector<int> inOrder = {4, 2, 5, 1, 3};
TreeNode* root = buildTree(preOrder, inOrder);
// ... (这里你可以添加打印或进一步操作树的代码)
return 0;
}
```
阅读全文