二叉树的各种算法_第1页
二叉树的各种算法_第2页
二叉树的各种算法_第3页
二叉树的各种算法_第4页
二叉树的各种算法_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、#include#include #define MAX 50 #define MAS 20 #define CHAR 1 #if CHARtypedef char TElemType;TElemType Nil= ;#define form %c#elsetypedef int TElemType;TElemType Nil=0;#define form %d #endif typedef struct node TElemType data;struct node *left;struct node *right; struct node *parent; BiTNode,*BiTree;

2、BiTNode *InitBiTree(BiTNode *bt)bt=NULL;return bt;BiTNode *CreateBiTree(BiTNode *bt)TElemType ch;scanf(form,&ch);if(ch=Nil) bt=NULL;elsebt=(BiTNode *)malloc(sizeof(BiTNode); if(!bt) exit(0);bt-data=ch; bt-parent=NULL; bt-left=CreateBiTree(bt-left); if(bt-left) bt-left-parent=bt; bt-right=CreateBiTre

3、e(bt-right); if(bt-right) bt-right-parent=bt;return bt;void PrintTree(BiTNode *bt,int i) if(bt!=NULL)PrintTree(bt-right,i+5);#if CHAR if(bt-data!=Nil) printf(%*cn,i,bt-data);#elseif(bt-data!=Nil) printf(%*dn,i,bt-data);#endifPrintTree(bt-left,i+5);i=i-5;void Prorderl(BiTNode *bt,void(*visit)(TElemTy

4、pe)/*先序遍历 */ if(bt!=NULL)visit(bt-data);Prorderl(bt-left,visit); Prorderl(bt-right,visit);void Prorder2(BiTNode *bt,void(*visit)(TElemType)/*中 序遍历 */ BiTNode *p,*stackMAS;int top;top=0; p=bt;while(top!=0|p!=NULL)while(p!=NULL)stacktop=p; top+;p=p-left;if(top!=0)p=stacktop-l;top-;visit(p-data); p=p-r

5、ight;void Prorder3(BiTNode *bt,void(*visit)(TElemType)/*后序遍历 */ BiTNode *p,*stackMAS;int top;top=0;stacktop=bt; top+;while(top0)p=stacktop-1; top-;while(p!=NULL)visit(p-data);stacktop=p-right;top+;p=p-left;void visit(TElemType e)printf(form ,e);int SumLefts(BiTNode *bt,int sum)if (bt!=NULL)if (bt-le

6、ft=NULL & bt-right=NULL) printf(%4c,bt-data); sum+;sum=SumLefts(bt-left,sum); sum=SumLefts(bt-right,sum);return(sum);int SumTree(BiTNode *bt) static int sum=0;if(bt!=NULL) printf(%4c,bt-data);sum+; sum=SumTree(bt-left); sum=SumTree(bt-right); return(sum);BiTNode *Findchar(BiTNode *bt,char ch)/*二叉树查找

7、结点*/BiTNode *p;/*利用函数名返回结果*/if(bt!=NULL)if(bt-data=ch) p=bt;p=Findchar(bt-left,ch);p=Findchar(bt-right,ch);if(p!=NULL) return(p);else return(NULL);void main() int j,i,a,sum=0;BiTree bt; bt=InitBiTree(bt);#if CHARprintf(请先序输入二叉树(如:ab三个空格表示a为根结点,b为左子树的二叉树)n); #elseprintf(请先序输入二叉树(如:1 2 0 0 0表示1为根结点,2为

8、左子树的二叉树)n); #endifbt=CreateBiTree(bt);printf(输入建立的二叉树!n);PrintTree(bt,5);doprintf();printf(n 主菜单);printf(n 1二叉树先序遍历);printf(n 2二叉树中序遍历);printf(n 3 二叉树后序遍历); printf(n 4 二叉树叶子结点数); printf(n 5 二叉树结点数);printf(n 6 二叉树查找 x 结点); printf(n 0退出);printf(n);printf(n);printf(输入你要选择的数据:”); scanf(%d,&i);switch(i)case 1: printf(先序遍历结果为:); Prorder1(bt,visit); break;case 2: printf(后序遍历结果为:”); Prorder2(bt,visit); break;case 3: printf(中序遍历结果为:); Prorder3(bt,visit); break;case 4: j=SumLefts(bt,sum);printf(”树的叶子结点数为d:,j);break;case 5: j=SumTree(bt);printf(”树的结点数为%d:,j);break;case 6: printf(输入要查

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论