微信小程序 > 微信公开课 > 写一个二叉树的程序
微信小程序,微信公开课,写一个二叉树的程序

写一个二叉树的程序

2019-03-12 17:01:43

微信公开课小程序热门讨论「写一个二叉树的程序#」最新回复-includeiostream#includestdlib.htypedefstructtree{structtree*left;intdate;structtree*right;}treenode,*b_tree;///////插入节点/////////////////////b_treeinsert(b_treeroot,intnode){b_treenewnode;b_treecurrentnode;b_treeparentnode;newnode=(b_tree)malloc(sizeof(treenode));newnodedate=node;newnoderight=NULL;newnodeleft=NULL;if(root==NULL)returnnewnode;else{currentnode=root;while(currentnode!=NULL){parentnode=currentnode;if(currentnodedatenode)currentnode=currentnodeleft;elsecurrentnode=currentnoderight;}if(parentnodedatenode)parentnodeleft=newnode;elseparentnoderight=newnode;}returnroot;}//////建立树///////////////////b_treecreat(int*date,intlen){b_treeroot=NULL;inti;for(i=0;ilen;i++)root=insert(root,date[i]);returnroot;}//////中序打印////////////////voidprint(b_treeroot){if(root!=NULL){print(rootleft);coutrootdateendl;print(rootright);}}///////测试函数//////////////////voidmain(){b_treeroot=NULL;inti,index;intvalue;intnodelist[20];cout输入树的节点,0退出\n;index=0;cinvalue;while(value!=0){nodelist[index]=value;index=index+1;cinvalue;}root=creat(nodelist,index);print(root);}
#includeiostream.h#includestdlib.htypedefstructBiTNode{//定义树的结构chardate;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;voidsumlr(BiTreeT,int&left,int&right)//统计左右孩子数目{if(T==NULL)return;else{if(T-lchild!=NULL) {  left++;  sumlr(T-lchild,left,right); } if(T-rchild!=NULL)  {  right++;  sumlr(T-rchild,left,right); }}}voidsumnode(BiTreeT,int&count)//统计结点数目{ if(T==NULL)return;else{ count++; sumnode(T-lchild,count); sumnode(T-rchild,count);}}voidparent_search(BiTreeT,charch2)//查找父亲节点{if(!T) return;  else{ if(!T-lchild&&!T-rchild) {  //cout输入数据错误endl;  return; } if(!(!T-lchild&&!T-rchild)) {  if(T-lchild&&!T-rchild)  {if(T-lchild-date==ch2) cout  父亲节点为T-dateendl;else { parent_search(T-lchild,ch2);  parent_search(T-rchild,ch2); }  }  if(!T-lchild&&T-rchild)  {if(T-rchild-date==ch2) cout  父亲节点为T-dateendl;else{ parent_search(T-lchild,ch2); parent_search(T-rchild,ch2);}  }  if(T-lchild&&T-rchild)  {if(T-lchild-date==ch2) cout  父亲节点为T-dateendl;else { parent_search(T-lchild,ch2);  parent_search(T-rchild,ch2); }if(T-rchild-date==ch2) cout  父亲节点为T-dateendl;else { parent_search(T-lchild,ch2);  parent_search(T-rchild,ch2); }  }}}}BiTreechildren_search(BiTree&T,charfindnode){//找子节点BiTreeT1,T2;if(T!=NULL){ if(T-date==findnode)  returnT; else  T1=children_search(T-lchild,findnode);  T2=children_search(T-rchild,findnode);  if(T1!=NULL)returnT1;  elseif(T2!=NULL) returnT2;else returnNULL;}else returnNULL;}voiddelData(BiTreeT,charch)//删除节点{if(!T)return;if((T-lchild==NULL)&&(T-rchild==NULL))return;if((T-lchild==NULL)&&(T-rchild!=NULL)){if(T-rchild-date==ch){T-rchild=NULL;} delData(T-rchild,ch);} if((T-rchild==NULL)&&(T-lchild!=NULL)) {  if(T-lchild-date==ch){T-lchild=NULL; }  delData(T-lchild,ch); } if((T-lchild!=NULL)&&(T-rchild!=NULL)) {  if(T-lchild-date==ch){T-lchild=NULL; }  if(T-rchild-date==ch){T-rchild=NULL;} delData(T-lchild,ch); delData(T-rchild,ch); }}voidCreateBiTree(BiTree&T){ //建立二叉数用的函数charb;cinb;if(b==#)T=NULL;  else{if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))  return;elseT-date=b;CreateBiTree(T-lchild);CreateBiTree(T-rchild);  }  return;}voidinsertData(BiTree&T,charch)//插入数据{if(!T)return; else{if(T-date==ch){  intcheck;cout  请输入数字:n  1为该数据插入左孩子,2为该数据插入右孩子endl;  cincheck;  if((T-lchild!=NULL)&&check==1)  {cout  该节点左孩子非空,无法插入endl;return;  }  if((T-rchild!=NULL)&&check==2)  {cout  该节点右孩子非空,无法插入endl;return;  }  if((T-lchild==NULL)&&check==1)  {BiTreeh;h=(BiTNode*)malloc(sizeof(BiTNode));charmo;cout  输入要插入的数据endl;cinmo;h-date=mo;h-lchild=NULL;h-rchild=NULL;T-lchild=h;cout  插入成功!endl;  }  if((T-rchild==NULL)&&check==2)  {BiTreeh1;h1=(BiTNode*)malloc(sizeof(BiTNode));charmo1;cout  输入要插入的数据endl;cinmo1;h1-date=mo1;h1-lchild=NULL;h1-rchild=NULL;T-rchild=h1;cout  插入成功!endl;  } }else {  insertData(T-lchild,ch);  insertData(T-rchild,ch); }}}//下面三个函数分别是前序,中序和后序遍历二叉树用的函数voidPreOrderTraverse(BiTree&T){ //前序if(T==NULL) return;cout;coutT-date;PreOrderTraverse(T-lchild);PreOrderTraverse(T-rchild);}voidInOrderTraverse(BiTreeT){ //中序if(T==NULL) return;InOrderTraverse(T-lchild);coutT-date;InOrderTraverse(T-rchild);}voidPostOrderTraverse(BiTree&T){  //后序if(T==NULL) return;PostOrderTraverse(T-lchild);PostOrderTraverse(T-rchild);coutT-date;}//主函数voidmain(){BiTreeT;inta;charb; do{  coutn  进入本程序后首先要建立一个二叉树,否则不能进一步操作nn  请按y确认首先建立二叉树n;  cinb;}while(b!=y&&b!=Y);do{ coutn  本系统可以提供下列操作:endl; cout  1.建立一棵二叉树(先序)endl; cout  2.前序遍历此二叉树endl; cout  3.中序遍历此二叉树endl; cout  4.后序遍历此二叉树endl; cout  5.输出二叉树某个节点的左右孩子endl; cout  6.输出二叉树某个节点的父节点endl; cout  7.删除二叉树以某个节点为父节点的子树endl; cout  8.为该树中的某个节点插入孩子节点endl; cout  9.统计节点数目endl; cout  10.分别统计左右孩子节点数目endl; cout  0.结束程序endlendl; cina; coutendlendl; switch(a) {  case1:cout  请输入数据建立一棵二叉树,输入#表示数为空endl;CreateBiTree(T);break;  case2:cout  先序遍历顺序为:;PreOrderTraverse(T);break;case3:cout  中序遍历顺序为:;InOrderTraverse(T);break;  case4:cout  后序遍历顺序为:;PostOrderTraverse(T);break;  case5:charposi;BiTreech;cout  请输入要查询的孩子的父节点:nn;cinposi;ch=children_search(T,posi);if(ch-lchild!=NULL&&ch-rchild!=NULL){ cout 此节点的左孩子:ch-lchild-date; ; cout 右孩子:ch-rchild-dateendl;}else{ if(ch-lchild!=NULL&&ch-rchild==NULL) {  cout 此节点的左孩子:ch-lchild-date; ;  cout 右孩子不存在endl; } else {  if(ch-lchild==NULL&&ch-rchild!=NULL)  {coutn 此节点的左孩子不存在endl;cout 右孩子:ch-rchild-daten ;  }  elsecout 两个孩子都不存在endl; }}break;  case6:charchild;cout输入子节点:;cinchild;parent_search(T,child);break;  case7:charfu;cout  输入删除子树的根节点:;cinfu;delData(T,fu);cout  删除后先序遍历顺序为:;PreOrderTraverse(T);coutendlendl;break;  case8:charparent;cout输入要插入孩子的父节点endl;cinparent;insertData(T,parent);break;  case9:{intb=0;sumnode(T,b);cout  该树的节点数目是:bendl;}break;  case10:intlef;intrigh;lef=0;righ=0;sumlr(T,lef,righ);cout  此树左孩子数目为:lef右孩子数目为:righendl;break;  case0:break;  default:cout  输入数字错误,请重新输入数字endl;break; }}while(a!=0);coutendlendl;}已通过编译 更多有关「写一个二叉树的程序#」的疑问请扫码关注微信公开课+小程序!
标签:微信公开课,小程序
微信小程序,微信公开课,写一个二叉树的程序

「写一个二叉树的程序」热议话题订阅

方法1:微信扫描微信公开课小程序码即可订阅热议话题「写一个二叉树的程序」

方法2:微信搜索微信公开课小程序名称进入,即可订阅热议话题「写一个二叉树的程序」

方法3:微信网页访问即速商店,长按识别微信公开课小程序码即可订阅热议话题「写一个二叉树的程序」

微信公开课小程序热议话题「写一个二叉树的程序」由微信公开课原创摘录于微信小程序商店shop.jisuapp.cn,转载请注明出处。

微信公开课热议话题「写一个二叉树的程序」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。