首页 建立二叉树,层序、先序遍历(用非递归的方法)

建立二叉树,层序、先序遍历(用非递归的方法)

举报
开通vip

建立二叉树,层序、先序遍历(用非递归的方法)建立二叉树,层序、先序遍历(用非递归的方法) #include #include #include #include #include #define SIZE 100 using namespace std; typedef struct BiTNode //??Òå?þ?æÊ??Úµã?á?? { char data; //Êý?ÝÓò struct BiTNode *lchild,*rchild; //×óÓÒº?×ÓÖ?ÕëÓò }BiTNode,*BiTree; int v...

建立二叉树,层序、先序遍历(用非递归的方法)
建立二叉树,层序、先序遍历(用非递归的方法) #include #include #include #include #include #define SIZE 100 using namespace std; typedef struct BiTNode //??Òå?þ?æÊ??Úµã?á?? { char data; //Êý?ÝÓò struct BiTNode *lchild,*rchild; //×óÓÒº?×ÓÖ?ÕëÓò }BiTNode,*BiTree; int visit(BiTree t); void CreateBiTree(BiTree &T); //Éú?ÉÒ??ö?þ?æÊ? void InOrderTraverse(BiTree T); //?ǵÝ?éÖÐÐò?éÀú?þ?æÊ? void PreOrder_Nonrecursive(BiTree T);//?ǵÝ?éÏÈÐò?éÀú?þ?æÊ? void LeverTraverse(BiTree T);//?ǵÝ?é?ãÐò?éÀú?þ?æÊ? //Ö?º?Êý void main() { BiTree T; char j; int flag=1; //---------------------?ÌÐò?â˵----------------------- printf("???ÌÐòʵÏÖ?þ?æÊ?µÄ?Ù×???\n"); printf("Ò?×Ó?áµãÒÔ?Õ?ñ?íÊ???\n"); printf("?ÉÒÔ?øÐÐ??Á??þ?æÊ????ǵÝ?éÏÈÐò??ÖÐÐò?éÀú???ǵÝ?é?ãÐò?éÀúµÈ ?Ù×???\n"); //---------------------------------------------------- printf("\n"); printf("Çë??Á??þ?æÊ???\n"); printf("??Ê???ÒÔÈý?ö?Õ?ñºó?Ø?µ?áÊø??\n"); printf("ÀýÈç:1 2 3 4 5 6 (?Ø?µ)\n"); CreateBiTree(T); //?õÊ????ÓÁÐ getchar(); while(flag) { printf("\n"); printf("ÇëÑ?Ôñ: \n"); printf("1.?ǵÝ?éÖÐÐò?éÀú\n"); printf("2.?ǵÝ?éÏÈÐò?éÀú\n"); printf("3.?ǵÝ?é?ãÐò?éÀú\n"); printf("0.ÍË?ö?ÌÐò\n"); scanf(" %c",&j); switch(j) { case '1':if(T) { printf("?ǵÝ?éÖÐÐò?éÀú?þ?æÊ?:"); InOrderTraverse(T); printf("\n"); } else printf("?þ?æÊ?Ϊ?Õ!\n"); break; case '2':if(T) { printf("?ǵÝ?éÏÈÐò?éÀú?þ?æÊ?:"); PreOrder_Nonrecursive(T); printf("\n"); } else printf("?þ?æÊ?Ϊ?Õ!\n"); break; case '3':if(T) { printf("?ǵÝ?é?ãÐò?éÀú?þ?æÊ?:"); LeverTraverse(T); printf("\n"); } else printf("?þ?æÊ?Ϊ?Õ!\n"); break; default:flag=0;printf("?ÌÐòÔËÐÐ?áÊø????ÈÎÒâ?üÍË?ö!\n"); } } } //??Á??þ?æÊ? void CreateBiTree(BiTree &T) { char ch; scanf("%c",&ch); //?ÁÈëÒ??ö×Ö?û if(ch==' ') T=NULL; else { T=(BiTNode *)malloc(sizeof(BiTNode)); //Éú?ÉÒ??öÐÂ?áµã T->data=ch; CreateBiTree(T->lchild); //Éú?É×ó×ÓÊ? CreateBiTree(T->rchild); //Éú?ÉÓÒ×ÓÊ? } } //?ǵÝ?éÖÐÐò?éÀú void InOrderTraverse(BiTree T) { stack S; BiTree p; S.push(T);//?úÖ?Õë?øÕ? while(!S.empty()) { p=new BiTNode; while((p=S.top())&&p) S.push(p->lchild);//Ïò×ó×ßµ???Í? S.pop(); //?ÕÖ?ÕëÍËÕ? if(!S.empty()) { p=S.top(); S.pop(); cout<data<<" "; S.push(p->rchild); } } } //ÏÈÐò?éÀúµÄ?ǵÝ?é void PreOrder_Nonrecursive(BiTree T) { stack S; BiTree p; S.push(T);//?ùÖ?Õë?øÕ? while(!S.empty())//Õ??ÕÊ??áÊø { while((p=S.top())&&p) { cout<data<<" "; S.push(p->lchild); }//Ïò×ó×ßµ???Í? S.pop();//µ??ö?ÑÕ? if(!S.empty()) { p=S.top(); S.pop(); S.push(p->rchild);//ÏòÓÒ×ßÒ??? } } } void LeverTraverse(BiTree T) {//?ǵÝ?é?ã?Î?éÀú queue Q; BiTree p; p = T; if(visit(p)==1) Q.push(p); while(!Q.empty()) { p = Q.front(); Q.pop(); if(visit(p->lchild) == 1) Q.push(p->lchild); if(visit(p->rchild) == 1) Q.push(p->rchild); } } int visit(BiTree T) { if(T) { printf("%c ",T->data); return 1; } else return 0; }
本文档为【建立二叉树,层序、先序遍历(用非递归的方法)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_737352
暂无简介~
格式:doc
大小:20KB
软件:Word
页数:7
分类:互联网
上传时间:2017-09-27
浏览量:254