- // 链树.cpp : 定义控制台应用程序的入口点。
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- typedef int ElemType;
- typedef struct Bitnode
- {
- ElemType data;
- struct Bitnode *lchild,*rchild;
- }Bitnode,*BitTree;
- /********search 第一个为遍历查找 第二个为二叉排序查找 ************/
- int fd=0;
- void Search_Elem2(BitTree T,ElemType e,BitTree &p,BitTree &f)//
- {
- if(T&&!fd)
- if(T->data==e)
- {p=T;fd=1;}
- else{ if(!fd){f=T;
- Search_Elem2(T->lchild,e,p,f);}
- if(!fd){ f=T;
- Search_Elem2(T->rchild,e,p,f);}
- }
- }
- void Search(BitTree T,ElemType e,BitTree*F,BitTree*P)//Search(T,e,&F,&P)
- {
- while(T)
- if(e==T->data){*P=T;break;}
- else if(T->data>e){*F=T;T=T->lchild;}
- else{*F=T;T=T->rchild;}
- }
- /******** 插入节点 ************/
- int Insert(BitTree &T,ElemType e)//有了&就牛逼了
- {BitTree F=NULL,P=NULL,S;//!!!
- Search(T,e,&F,&P);
- if(P)return 0;
- S=new Bitnode;
- S->data=e;
- S->lchild=NULL;
- S->rchild=NULL;
- if(F==NULL)T=S;
- else if (F->data<e)F->rchild=S;
- else F->lchild=S;
- return 1;
- }
- /******** 中序 遍历 ************/
- void In_Order_Traverse(BitTree T)
- {if(T)
- {
- In_Order_Traverse(T->lchild);
- cout<<T->data;
- In_Order_Traverse(T->rchild);
- }
- }
- /******** 删除节点 中序不变 ************/
- void Delete_Elem(BitTree &T,ElemType e)//*
- {
- BitTree s,q,p=NULL,f=NULL;
- cout<<endl<<e<<" :";
- Search(T,e,&f,&p);//fd=0;Search_Elem2(T,e,p,f);
- if(p==NULL)cout<<"The target elem no exist orthe tree is empty "<<endl;//1
- else{
- if(p->lchild==NULL&&p->rchild==NULL)//leaf
- {if(f==NULL)T=NULL;//pbuxing
- else{ delete(p);
- if(f->lchild==p)f->lchild=NULL;
- else f->rchild=NULL;}//
- }
- else if(p->lchild==NULL)//2
- {//cout<<f;cout<<T->data;cout<<T->rchild->data<<" "; //
- if(f==NULL)
- {T=p->rchild;delete(p);
- }
- else{if(f->lchild==p)f->lchild=p->rchild;
- else f->rchild=p->rchild;}
- }
- else if(p->rchild==NULL)//22
- {
- if(f==NULL)
- {T=p->lchild;delete(p);
- }
- else{if(f->lchild==p)f->lchild=p->lchild;
- else f->rchild=p->lchild;}
- }
- else {q=p;
- s=q->lchild;
- while(s->rchild!=NULL){q=s;s=s->rchild;}
- p->data=s->data;
- if(q->lchild==s)q->lchild=s->lchild;
- else q->rchild=s->lchild;
- delete(s);
- }
- }
- }
- int main()
- {
- BitTree T=NULL;
- //输入124三个空格357两个空格8两个空格6两个空格
- Insert(T,1);
- Insert(T,2);
- Insert(T,3);
- Insert(T,4);
- Insert(T,5);
- Insert(T,6);
- Delete_Elem(T,1);
- In_Order_Traverse(T);
- Delete_Elem(T,2);
- In_Order_Traverse(T);
- Delete_Elem(T,3);
- In_Order_Traverse(T);
- Delete_Elem(T,4);
- In_Order_Traverse(T);
- Delete_Elem(T,5);
- In_Order_Traverse(T);
- Delete_Elem(T,6);
- In_Order_Traverse(T);
- Delete_Elem(T,7);
- In_Order_Traverse(T);
- Delete_Elem(T,8);
- In_Order_Traverse(T);
- Delete_Elem(T,9);
- In_Order_Traverse(T);
- Delete_Elem(T,0);
- In_Order_Traverse(T);
- int m;
- cin>>m;
- return 1;
- }