#include<iostream>
using namespace std;
typedef struct node {
int data;
node* lChild, * rChild;
}Tree,*Bitree;
void CreateTreeByOrder(Bitree& t, int n) {
if (t) {
if (t->data > n) {
CreateTreeByOrder(t->lChild, n);
}
else {
CreateTreeByOrder(t->rChild, n);
}
}
else {
t = new Tree;
t->lChild = NULL;
t->rChild = NULL;
t->data = n;
}
}
void PreOutBiTree(Bitree t) {
if (t) {
PreOutBiTree(t->lChild);
cout << t->data << " ";
PreOutBiTree(t->rChild);
}
}
int SeekItem(Bitree t, int n) {
if (t) {
if (t->data == n) {
return 1;
}
else {
return SeekItem(t->lChild, n) || SeekItem(t->rChild, n);
}
}
else {
return 0;
}
}
void SeekItemAndDelete(Bitree &t, int n) {
Bitree p, father;
p = t; father = NULL;
while (p) {
if (p->data == n) {
break;
}
father = p;
if (p->data > n) {
p = p->lChild;
}
else {
p = p->rChild;
}
}
Bitree q = p;
if (p->lChild != NULL && p->rChild != NULL) {
Bitree s = p->lChild;
while (s->rChild) {
q = s;
s = s->rChild;
}
p->data = s->data;
if (p != q) {
q->rChild = s->lChild;
}
else {
q->lChild = s->lChild;
}
delete s;
}
else if (p->rChild==NULL) {
p = p->lChild;
}
else if (p->lChild == NULL) {
p = p->rChild;
}
if (!father) {
t = p;
}
else if (q == father->lChild) {
father->lChild = p;
}
else {
father->rChild = p;
}
}
int main() {
int n;
cin >> n;
Bitree t = new Tree;
t->data = n;
t->lChild = NULL;
t->rChild = NULL;
cin >> n;
while (n != 0) {
CreateTreeByOrder(t, n);
cin >> n;
}
PreOutBiTree(t);
cout << "\n";
cin >> n;
if (SeekItem(t, n)) {
cout << "该数存在" << endl;
}
else {
cout << "该数不存在" << endl;
}
cin >> n;
SeekItemAndDelete(t, n);
PreOutBiTree(t);
return 0;
}
【7081】利用二叉排序树的插入算法创建二叉排序树,并中序遍历该二叉树
最新推荐文章于 2022-01-05 09:44:14 发布