
写一个二叉树的程序
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;}已通过编译 更多有关「写一个二叉树的程序#」的疑问请扫码关注微信公开课+小程序!
#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,转载请注明出处。
微信公开课热议话题「写一个二叉树的程序」由微信公开课开发者向微信用户提供,并对本服务内容、数据资料及其运营行为等真实性、合法性及有效性承担全部责任。
微信公开课小程序
更新时间:2019-03-12 17:01:43
>
__methodCallerx27;ofundefined
>-404011cloudfunctionexecutionerror
>,请补充选择商家自营-预付卡销售-发行方类目,并在基础信息处申请该类目,通过
>:host在模拟器中显示无效
>:请在小程序服务页面上架正式(非测试)内容或商品后重新提交审核
>.net 微信小程序 上传图片
>'setTimeout'的问题
>‘三朵里熙SPA主题减压空间’为什么搜索关键词‘三朵里‘搜不到
>‘扫普通链接二维码打开小程序‘中设置为体验版,扫码打开是线上版本
>“cloudfunctions**indexjs”gitignore
>“NO ULINK DEVICE FOUND”是怎么回事
>“万马掌上校园”的类目审核
>“上线了”公司开发的微信小程序怎么样?
>“产品是否一定需要条形码”
>