#include<iostream>
#include<vector>
struct BstTreeNode;
typedef struct BstTreeNode Tree;
typedef int ElemType;
struct BstTreeNode {
ElemType element;
Tree* rchlid;
Tree* lchild;
};
Tree* Find(Tree* &Bst, ElemType X) {
if (Bst->element < X)
Bst->rchlid = Find(Bst->rchlid, X);
else if (Bst->element > X)
Bst->lchild = Find(Bst->lchild, X);
else
return Bst;
}
Tree* GetParentNode(Tree* &Bst, ElemType X) {
Tree* parent = nullptr;
if (Bst->lchild != nullptr || Bst->rchlid != nullptr) {
if (Bst->lchild->element == X || Bst->rchlid->element == X) {
parent = Bst;
return parent;
}
Bst->lchild = GetParentNode(Bst->lchild, X);
Bst->rchlid = GetParentNode(Bst->rchlid, X);
}
}
Tree* FindMin(Tree* &Bst) {
if (Bst != nullptr)
while (Bst->lchild != nullptr)
Bst = Bst->lchild;
return Bst;
}
Tree* FindMax(Tree* &Bst) {
if (Bst != nullptr)
while (Bst->rchlid != nullptr)
Bst = Bst->rchlid;
return Bst;
}
void Insert(Tree* &Bst, ElemType X) {
if (Bst == nullptr) {
Bst = new Tree;
Bst->element = X;
Bst->lchild = Bst->rchlid = nullptr;
}
else {
if (Bst->element > X)
Insert(Bst->lchild, X);
else if (Bst->element < X)
Insert(Bst->rchlid, X);
else
return;
}
}
void Delete(Tree* &Bst, ElemType X) {
Tree* temp = new Tree;
if (Bst == nullptr)
throw std::out_of_range("BstTree is empty!!");
else if (Bst->element > X)
Delete(Bst->lchild, X);
else if (Bst->element < X)
Delete(Bst->rchlid, X);
else
{
if (Bst->lchild && Bst->rchlid)
{
temp = FindMin(Bst->rchlid);
Bst->element = temp->element;
Delete(Bst->rchlid, Bst->element);
}
else
{
temp = Bst;
if (Bst->lchild == nullptr)
Bst = Bst->rchlid;
else if (Bst->rchlid == nullptr)
Bst = Bst->lchild;
else
delete temp;
}
}
}
void print(Tree* &Bst) {
if (Bst == nullptr)
return;
else {
std::cout << Bst->element << "\n";
print(Bst->lchild);
print(Bst->rchlid);
}
}
int main(void)
{
Tree* Bst = nullptr;
std::vector<int>vec{ 9,5,3,56,12,78,54,1};
for (const auto& x : vec) {
Insert(Bst, x);
};
print(Bst);
std::cout << "<<<<<<<<<<<<<<<<<<<<<<<<<<" << std::endl;
std::cout << "delete a elem: 1" << "\n";
Delete(Bst, 1);
print(Bst);
}
二叉树查找树的基本操作
猜你喜欢
转载自blog.csdn.net/qq_43145594/article/details/100901544
今日推荐
周排行