用二叉树实现存储信息用二叉树实现存储信息.txt老子忽悠孩子叫教育,孩子忽悠老子叫欺骗,互相忽悠叫代沟。
▲ 男人这花花世界,我要用什么颜色来吸引你。
#in elude <iostream>#inelude <stdlib.h>using n amespaee std;typedef struct _stude nt{int id;ehar[20] Name;Int Age ;int Math;//(数学成绩)};//学生结构体struct treeitem{struct treeitem *lchild;struct treeitem *rchild;struct _stude nt mystude nt;};//二叉树结构体class Stude nt{public:Stude nt(void);~Stude nt(void);void Create(struct treeitem *Tnode );//创建void Find(struct treeitem *tree,int i);//查看节点是否存在void Search(Stude nt &tree);〃查询节点void Chan ge(struct treeitem *Tno de,i nt i);// 修改void DeleteNode(struct treeitem *tree,int i);//删除Stude nt *n ode;// 根节点private:bool tj;int i_id,i_age,i_math;char c_ch;};.cpp=== Stude nt::Stude nt(void){tj=false;}Student::~Stude nt(void){}void Stude nt::Create(struct treeitem *Tnode)// 创建 1{ci n>>i」d,c_ch,i_age,i_math;if(id!=null&&ch!="&&age!=null&&math!=null){struct _stude nt *Ts;Ts->id=i」d;Ts->Name=c_ch;Ts->Age=i_age;Ts->Math=i_math;Tno de=(struct treeitem*)malloc(sizeof(structtreeitem));Tno de->mystude nt=Ts;Create(T no de->lchild); // 生成左子树Create(T no de->rchild); // 生成右子树cout«"Create Complated!"«e ndl;}else{Tn ode=NULL; cout<v"No Create Complated!"<<e ndl;}void Bin STree::Fi nd(struct treeitem*tree,i nt i)// 查找{if(tree!=NULL){if(tree->id==i){tj=true;return;}if(tree->lchild匸NULL){f(tree->lchild->id == i){tj=true;return;}} if(tree->rchild!=NULL){f(tree->rchild->id == i){tj=true;return;Fin d(tree->lchild,i);Fin d(tree->rchild,i);}void Student::Search(Student &tree){if(tree!NULL){if(tree->lchild->lchild==NULL&&tree->lc hild->rchild==NULL){retur n tree->lchild;}elsef(tree->rchild->lchild==NULL&&tree->rchi d->rchild==NULL) {return tree->rchild; returnSearch(tree->lchild); returnSearch(tree->rchild);}void Stude nt::Change(structtreeitem *Tnode, int i){Find (Tnode, i );if(!tj){coutvv"无此节点!"<<endl;}else{ci n> >i_age,i_math,c_ch;Tno de->mystude nt.Age=i_age;Tno de->mystude =c_ch;Tno de->mystude nt.Math=i_math;}void Stude nt::DeleteNode(struct*tree,i nt i){Fin d(tree,i);if(!tj){cout«"无点!"<<e ndl;return;}if(tree!=NULL){if(no de->id== i)//的正好是根节点{f(no de->lchild == NULL && node->rchild NULL)//只有一个根节点的情况{delete node; treeitem要删除node=NULL;coutvv"已删除节点,当前树为空"<<endl;return;}elseif(no de->lchild != NULL && node->rchild ==NULL)//有左孩子没右孩子{treeitem *p = no de;treeitem *dnew treeitem(Search( no de)->id);d->lchild = tree->lchild;d->rchild = NULL;node=d;delete p;cout«"ID 值为"vvivv"的节点已"<<e ndl;}elseif(n ode->rchild != NULL && node->lchild : NULL)//有右孩子没左孩子{treeitem *p = no de;treeitem *dtreeitem(Search( no de)->c onten ts);d->lchild= NULL;d->rchild = tree->rchild;node =d;被删除newdelete p;cout«"ID值为"vvivv"的节"vve ndl;}else//有左、右孩子{treeitem *p = no de;treeitem *d treeitem(Search( no de)->id);d->lchild = tree->lchild;d->child = tree->rchild;node 点已被删除new=d;cout«"ID 值为"vvivv"的节点已被删除"<<e ndl;}}if(tree->lchild!=NULL)〃左孩子,且正是要查找的{if(tree->lchild->id == i)//子是要查找的{if(tree->lchild->lchildtree->lchild->rchild != NULL){ treeitem *p = tree->lchild;不是根节点,树还有若根节点的左孩== NULL &&cout«"ID 值为"vvivv"的节点已被删除"<<e ndl;} elsef(tree->lchild->lchild tree->lchild->rchildNULL && == NULL) delete tree->lchild;tree->lchild = NULL;cout«"ID值为"vvivv"的节点已被删除"<<e ndl;}elsef(tree->lchild->lchild != NULL &&tree->lchild->rchild == NULL){treeitem *p = tree->lchild;tree->lchild = tree->lchild->lchild;delete p;cout«"ID值为"vvivv"的节点已被删除"<<e ndl;}elseif(tree->lchild->lchild != NULL &&tree->lchild->rchild != NULL){treeitem *p = tree->lchild;treeitem *d = new treeitem(Search( no de)->id);d->left = tree->lchildt->lchild;tree->lchild = d;delete p;return;f(tree->rchild->id == i){f(tree->rchild->lchild tree->rchild->rchild == NULL){f(tree->rchild 匸NULL)// 右孩子,且正是要查找的{不是根节点,树还有 NULL &&tree->rchild = NULL;cout«"ID值为"vvivv"的节点已被删除"vve ndl;}elsef(tree->rchild->lchild != NULL && tree->rchild->rchild == NULL){treeitem *p = tree->rchild;tree->rchild = tree->rchild->lchild;delete p;cout<<"ID 值为"vvivv"的节点已被删除'<<e ndl;}elseif(tree->rchild->child == NULL && tree->rchild->rchild != NULL)treeitem *p = tree->rchild;tree->rchild = tree->rchild->rchild; delete p;cout«"ID 值为"vvivv"的节点已被删除"<<e ndl;}elseif(tree->rchild->lchildtree->rchild->rchild != NULL){ treeitem *p = tree->rchild; treeitem(Search( no de)->id);d->lchild = tree->rchild->lchild; != NULL &&treeitem *d newd->rchild = tree->rchild->rchild;tree->rchild = d;delete p;}retur n;}}继续根节点的DeleteNode(tree->lchild,i);〃左孩子,进行递归算法。