#include<iostream>
using namespace std;
typedef int ElemType;
typedef struct Node
{
ElemType data;
struct Node *lchild;
struct Node *rchild;
}*BSTree;
bool search_BSTree(BSTree pTree,int key,BSTree parent,BSTree &p)
{
if(!pTree)
{
p=parent;
return false;
}else
{
if(key==pTree->data)
{
p=pTree;
return true;
}else if(key<pTree->data)
{
return search_BSTree(pTree->lchild,key,pTree,p);
}
else
{
return search_BSTree(pTree->rchild,key,pTree,p);
}
}
}
bool insertNode(BSTree &pTree,int v)//特別注意:這裏傳入的是引用,如果不是引用將出錯
{
cout<<"進來插入了了。。。"<<endl;
BSTree p;
if(!search_BSTree(pTree,v,NULL,p))
{
BSTree bt=(BSTree)malloc(sizeof(Node));
bt->data=v;
bt->lchild=NULL;
bt->rchild=NULL;
if(!p)
{
pTree=bt;
cout<<"pTree"<<pTree->data<<endl;
}
else if(v<p->data)
{
p->lchild=bt;
}
else
{
p->rchild=bt;
}
return true;
}
else
return false;
}
BSTree create_BSTree(int *a,int num)
{
cout<<"進來創建二叉樹了。。"<<endl;
BSTree p=NULL;
for(int i=0;i<num;i++)
{
cout<<"*(a+i)"<<*(a+i)<<endl;
insertNode(p,*(a+i));
}
return p;
}
void in_traverse(BSTree t)
{
if(t)
{
if(t->lchild)
in_traverse(t->lchild);
cout<<t->data<<endl;
if(t->rchild)
in_traverse(t->rchild);
}
}
void del_node(BSTree &p)
{
BSTree q,s;
if(!p->lchild)
{
q=p;
p=p->rchild;
free(q);
}
else if(!p->rchild)
{
q=p;
p=p->rchild;
free(q);
}
else
{
s=p->lchild;
while(s->rchild)
{
s=s->rchild;
}
s->rchild=p->rchild;
q=p;
p=p->lchild;
free(q);
}
}
bool del_nodeFromTree(BSTree &pTree,int key)
{
if(!pTree)
{
return false;
}
else
{
if(key==pTree->data)
{
del_node(pTree);
return true;
}
else if(key<pTree->data)
{
return del_nodeFromTree(pTree->lchild,key);
}
else
{
return del_nodeFromTree(pTree->rchild,key);
}
}
}
void main()
{
BSTree t;
int num;
int b;
cout<<"請輸入創建的樹的結點數目"<<endl;
cin>>num;
int *a=(int*)malloc(sizeof(int)*num);
cout<<"請輸入要插入的值"<<endl;
for(int i=0;i<num;i++)
{
cin>>a[i];
cout<<"a[i]"<<a[i]<<endl;
}
t=create_BSTree(a,num);
//中序遍歷創建的二叉查找樹
cout<<"遍歷得到的結果爲"<<endl;
in_traverse(t);
cout<<"請輸入要刪除的結點"<<endl;
cin>>b;
del_nodeFromTree(t,b);
cout<<"刪除結點後的遍歷得到的結果爲"<<endl;
in_traverse(t);
system("pause");
}
查找二叉樹的創建插入查找刪除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.