📅  最后修改于: 2023-12-03 15:36:37.457000             🧑  作者: Mango
二叉搜索树(Binary Search Tree)是一种使得查找、插入、删除操作都具有较高效率的二叉树。对于给定的一棵二叉树,我们可以通过使用STL集来将其转换为二叉搜索树。本文将介绍如何使用STL集实现这个过程。
实现过程主要包含以下几个步骤:
这里借助STL集实现二叉搜索树的插入将大大简化我们的代码,因为STL集底层已经使用了二叉搜索树进行实现。
下面是实现过程的代码:
#include<iostream>
#include<vector>
#include<algorithm>
#include<set>
using namespace std;
struct node
{
int val;
node* left;
node* right;
};
void inOrder(node* root, vector<node*>& vec)
{
if (root == nullptr) return;
inOrder(root->left, vec);
vec.push_back(root);
inOrder(root->right, vec);
}
node* buildBST(vector<node*>& vec, int left, int right)
{
if (left > right) return nullptr;
int mid = left + (right - left) / 2;
node* root = vec[mid];
root->left = buildBST(vec, left, mid - 1);
root->right = buildBST(vec, mid + 1, right);
return root;
}
node* convertToBST(node* root)
{
vector<node*> vec;
inOrder(root, vec);
sort(vec.begin(), vec.end(), [](node* a, node* b) {return a->val < b->val;});
return buildBST(vec, 0, vec.size() - 1);
}
int main()
{
/* 构建二叉树 */
node a, b, c, d, e, f;
a = {4, &b, &c};
b = {2, &d, &e};
c = {6, nullptr, &f};
d = {1, nullptr, nullptr};
e = {3, nullptr, nullptr};
f = {7, nullptr, nullptr};
node* root = &a;
/* 将二叉树转换为二叉搜索树 */
root = convertToBST(root);
/* 输出转换完成的二叉搜索树 */
cout << root->val << ' ' << root->left->val << ' ' << root->right->val << endl;
return 0;
}
本文介绍了使用STL集将二叉树转换为二叉搜索树的实现过程。通过使用STL集,我们可以非常方便地实现二叉搜索树的插入操作,从而大大简化了转换过程的实现。