C++ 刷题 建树
时间: 2023-11-14 12:10:18 浏览: 99
好的,我明白了。对于你的问题,建树是指在算法竞赛中常用的一种数据结构,用于存储树形结构的数据。在 C++ 中,可以使用结构体或者类来实现树的节点,然后使用指针来连接节点之间的关系。具体实现可以参考以下代码:
```cpp
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
if (preorder.empty() || inorder.empty()) {
return nullptr;
}
int rootVal = preorder[0];
TreeNode* root = new TreeNode(rootVal);
int rootIndex = 0;
for (int i = 0; i < inorder.size(); i++) {
if (inorder[i] == rootVal) {
rootIndex = i;
break;
}
}
vector<int> leftPreorder(preorder.begin() + 1, preorder.begin() + rootIndex + 1);
vector<int> leftInorder(inorder.begin(), inorder.begin() + rootIndex);
vector<int> rightPreorder(preorder.begin() + rootIndex + 1, preorder.end());
vector<int> rightInorder(inorder.begin() + rootIndex + 1, inorder.end());
root->left = buildTree(leftPreorder, leftInorder);
root->right = buildTree(rightPreorder, rightInorder);
return root;
}
```
这段代码实现了根据前序遍历和中序遍历构建二叉树的功能。你可以根据自己的需要进行修改和扩展。
阅读全文