正在加载图片...
return ErrOR 以下为孩子兄弟表示法存储的树或森林的类型定义及树的相关操作实现 typedef struct CSNodet TElemType data struct CSNode *firstchild struct CSNode * nextsibling I CSNode, *sTRe Status BiTreetoTreeorForest(BiTree BiT, CSTree &T)I ∥/根据已经存在的二叉树BiT转换得到孩子兄弟法表示的树或者森林T,原二叉树BiT保持不变。注意思考 何时得到树,何时得到森林 if(BiT==NULL)T=NULL T=(CSTree)malloc(sizeof(CSNode)) if(!T)exit(OVERFLOW) T->data=BiT->data BiTreetoTreeor Forest(BiT->lchild, T->firstchild) BiTreetoTreeorForest( BiT->rchild, T->nextsibling) return OK: Status PostRoot Traverse(CSTree T, Status (*visit)(TElem Type))i 后根序遍历树T(对森林则是中序遍历),相当于中序遍历二叉链表存储结构 if(T) Post RootTraverse(T->firstchild, (*visit)) (*visit)(T->data) Post RootTraverse(T->nextsibling, (visit)) retu int Treeor Depth( STRee T){/求树或森林的深度 int d dl. d if(!T)d=0 d1=TreeorFores Depth(T->firstchild) d2=TreeorForest Depth (T->nextsibling) d=(dl+1)>d2?dl+1:d2 return d void PrintBiTree(BiTree T, int level)( /仿照题集题凹式打印树的形式打印二叉树 /注意是逐行打印,采用先序,凹入深度由结点所在层次控制,根结点位于第层,故最初 level为 if(Ti /先根据当前结点所处层次打印若干空格以缩进,每层所尽量为(1evel-1)*4个空格 for (int i=l: i<=level-1: ++i)printf(") printf( %c\n", T->data) PrintBiTree(T->lchild, level+1) PrintBiTree(T->rchild, level+1) void PrintTree(STRee T, int level)[ /按题集题凹式打印树 /注意是逐行打印,采用先根序,凹入深度由结点所在层次控制,根结点位于第层,故最初 level为 if(T)i /先根据当前结点所处层次打印若干空格以缩进,每层所尽量为(1evel-1)*4个空格return ERROR; } //-------------------以下为孩子兄弟表示法存储的树或森林的类型定义及树的相关操作实现 ------------------------------------- typedef struct CSNode{ TElemType data; struct CSNode *firstchild; struct CSNode *nextsibling; }CSNode,*CSTree; Status BiTreetoTreeorForest(BiTree BiT,CSTree &T){ //根据已经存在的二叉树BiT转换得到孩子兄弟法表示的树或者森林T,原二叉树BiT保持不变。注意思考 何时得到树,何时得到森林 if(BiT==NULL)T=NULL; else{ T=(CSTree)malloc(sizeof(CSNode)); if(!T)exit(OVERFLOW); T->data=BiT->data; BiTreetoTreeorForest(BiT->lchild,T->firstchild); BiTreetoTreeorForest(BiT->rchild,T->nextsibling); } return OK; } Status PostRootTraverse(CSTree T,Status (*visit)(TElemType)){ //后根序遍历树T(对森林则是中序遍历),相当于中序遍历二叉链表存储结构 if(T){ PostRootTraverse(T->firstchild,(*visit)); (*visit)(T->data); PostRootTraverse(T->nextsibling,(*visit)); } return OK; } int TreeorForestDepth(CSTree T){//求树或森林的深度 int d,d1,d2; if(!T)d=0; else{ d1=TreeorForestDepth(T->firstchild); d2=TreeorForestDepth(T->nextsibling); d=(d1+1)>d2?d1+1:d2; } return d; } void PrintBiTree(BiTree T,int level){ //仿照题集题凹式打印树的形式打印二叉树 //注意是逐行打印,采用先序,凹入深度由结点所在层次控制,根结点位于第层,故最初level为 if(T){ //先根据当前结点所处层次打印若干空格以缩进,每层所尽量为(level-1)*4个空格 for(int i=1;i<=level-1;++i)printf(" "); printf("%c\n",T->data); PrintBiTree(T->lchild,level+1); PrintBiTree(T->rchild,level+1); } } void PrintTree(CSTree T,int level){ //按题集题凹式打印树 //注意是逐行打印,采用先根序,凹入深度由结点所在层次控制,根结点位于第层,故最初level为 if(T){ //先根据当前结点所处层次打印若干空格以缩进,每层所尽量为(level-1)*4个空格
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有