算法6.6和6.7---有错误,未改正
来源:互联网 发布:什么是淘宝店铺sku 编辑:程序博客网 时间:2024/05/04 11:14
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OK 1
#define OVERFLOW 0
#define Status int
typedef enum PointerTag {Link,Thread}PointerTag;
typedef struct BiThrNode{
char data;
struct BiThrNode *lchild,*rchild;
PointerTag LTag,RTag;
}BiThrNode,*BiThrTree;
Status InOrderThreading(BiThrTree,BiThrTree);
Status InThreading(BiThrTree,BiThrTree);
Status InOrderTraverse_Thr(BiThrTree);
int main(void){
BiThrTree L,A,B,C,D,E,F,G,H,I,J,K;
L=(BiThrTree)malloc(sizeof(BiThrNode));
A=(BiThrTree)malloc(sizeof(BiThrNode));
B=(BiThrTree)malloc(sizeof(BiThrNode));
C=(BiThrTree)malloc(sizeof(BiThrNode));
D=(BiThrTree)malloc(sizeof(BiThrNode));
E=(BiThrTree)malloc(sizeof(BiThrNode));
F=(BiThrTree)malloc(sizeof(BiThrNode));
G=(BiThrTree)malloc(sizeof(BiThrNode));
H=(BiThrTree)malloc(sizeof(BiThrNode));
I=(BiThrTree)malloc(sizeof(BiThrNode));
J=(BiThrTree)malloc(sizeof(BiThrNode));
K=(BiThrTree)malloc(sizeof(BiThrNode));
L->lchild=A;L->rchild=G;
A->lchild=B;A->rchild=C;A->data='-';
B->lchild=D;B->rchild=E;B->data='+';
C->lchild=F;C->rchild=G;C->data='/';
D->lchild=L;D->rchild=B;D->data='a';
E->lchild=H;E->rchild=I;E->data='*';
F->lchild=A;F->rchild=C;F->data='e';
G->lchild=C;G->rchild=L;G->data='f';
H->lchild=B;H->rchild=E;H->data='b';
I->lchild=J;I->rchild=K;I->data='-';
J->lchild=E;J->rchild=I;J->data='c';
K->lchild=I;K->rchild=A;K->data='d';
BiThrTree Thrt;
InOrderThreading(Thrt,A);
return 1;
}
Status InOrderTraverse_Thr(BiThrTree T){
BiThrTree p;
p=T->lchild;
while(p!=T){
while(p->LTag==Link) p=p->lchild;
printf("%c",p->data);
while(p->RTag==Thread && p->rchild!=T){
p=p->rchild;
printf("%c",p->data);
}
p=p->rchild;
}
printf("\n");
return OK;
}
Status InOrderThreading(BiThrTree Thrt, BiThrTree T){
BiThrTree pre;
if(!(Thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);
Thrt->LTag=Link;Thrt->RTag=Thread;
Thrt->rchild=Thrt;
if(!T) Thrt->lchild=Thrt;
else{
Thrt->lchild=T;pre=Thrt;
InThreading(T,pre);
pre->rchild=Thrt;pre->RTag=Thread;
Thrt->rchild=pre;
}
return OK;
}
Status InThreading(BiThrTree p,BiThrTree pre){
if(p){
InThreading(p->lchild,pre);
if(!p->lchild){p->LTag=Thread;p->lchild=pre;}
if(!pre->rchild){pre->RTag=Thread;pre->rchild=p;}
pre=p;
InThreading(p->rchild,pre);
}
return OK;
}
#include<stdlib.h>
#include<string.h>
#define OK 1
#define OVERFLOW 0
#define Status int
typedef enum PointerTag {Link,Thread}PointerTag;
typedef struct BiThrNode{
char data;
struct BiThrNode *lchild,*rchild;
PointerTag LTag,RTag;
}BiThrNode,*BiThrTree;
Status InOrderThreading(BiThrTree,BiThrTree);
Status InThreading(BiThrTree,BiThrTree);
Status InOrderTraverse_Thr(BiThrTree);
int main(void){
BiThrTree L,A,B,C,D,E,F,G,H,I,J,K;
L=(BiThrTree)malloc(sizeof(BiThrNode));
A=(BiThrTree)malloc(sizeof(BiThrNode));
B=(BiThrTree)malloc(sizeof(BiThrNode));
C=(BiThrTree)malloc(sizeof(BiThrNode));
D=(BiThrTree)malloc(sizeof(BiThrNode));
E=(BiThrTree)malloc(sizeof(BiThrNode));
F=(BiThrTree)malloc(sizeof(BiThrNode));
G=(BiThrTree)malloc(sizeof(BiThrNode));
H=(BiThrTree)malloc(sizeof(BiThrNode));
I=(BiThrTree)malloc(sizeof(BiThrNode));
J=(BiThrTree)malloc(sizeof(BiThrNode));
K=(BiThrTree)malloc(sizeof(BiThrNode));
L->lchild=A;L->rchild=G;
A->lchild=B;A->rchild=C;A->data='-';
B->lchild=D;B->rchild=E;B->data='+';
C->lchild=F;C->rchild=G;C->data='/';
D->lchild=L;D->rchild=B;D->data='a';
E->lchild=H;E->rchild=I;E->data='*';
F->lchild=A;F->rchild=C;F->data='e';
G->lchild=C;G->rchild=L;G->data='f';
H->lchild=B;H->rchild=E;H->data='b';
I->lchild=J;I->rchild=K;I->data='-';
J->lchild=E;J->rchild=I;J->data='c';
K->lchild=I;K->rchild=A;K->data='d';
BiThrTree Thrt;
InOrderThreading(Thrt,A);
return 1;
}
Status InOrderTraverse_Thr(BiThrTree T){
BiThrTree p;
p=T->lchild;
while(p!=T){
while(p->LTag==Link) p=p->lchild;
printf("%c",p->data);
while(p->RTag==Thread && p->rchild!=T){
p=p->rchild;
printf("%c",p->data);
}
p=p->rchild;
}
printf("\n");
return OK;
}
Status InOrderThreading(BiThrTree Thrt, BiThrTree T){
BiThrTree pre;
if(!(Thrt=(BiThrTree)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);
Thrt->LTag=Link;Thrt->RTag=Thread;
Thrt->rchild=Thrt;
if(!T) Thrt->lchild=Thrt;
else{
Thrt->lchild=T;pre=Thrt;
InThreading(T,pre);
pre->rchild=Thrt;pre->RTag=Thread;
Thrt->rchild=pre;
}
return OK;
}
Status InThreading(BiThrTree p,BiThrTree pre){
if(p){
InThreading(p->lchild,pre);
if(!p->lchild){p->LTag=Thread;p->lchild=pre;}
if(!pre->rchild){pre->RTag=Thread;pre->rchild=p;}
pre=p;
InThreading(p->rchild,pre);
}
return OK;
}
0 0
- 算法6.6和6.7---有错误,未改正
- DM8168集成图像算法(改正官方文档中错误)
- 错误小记,以后改正
- 初学HIBERNATE,错误改正
- git pull错误改正
- cuda错误改正
- 用分治算法求数组最小的两个元素的算法错误分析与改正
- 一个错误与改正 hibernate
- _tcsstr ambiguous错误的改正
- error LNK2001: __imp___CrtDbgReportW 错误改正
- 内存分配错误例子& 改正
- is not mapped 错误改正
- 练习3.6 for (auto &c;line) getline(cin,line ) 下标 有个程序有错误没改正
- redis学习入门(很多未补充的和有错误请大家多多指教和包涵,谢谢)
- C语言 输出字符金字塔 步步错,步步改正的过程,有时是逻辑错误,有 时是衔接错误,更有时是自己无法意识到的错误
- 天线高改正和天线相位中心改正
- 关于echo %classpath% 曾经错误的改正
- 大数相加(代码错误,求改正)
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- 黑马程序员——键盘录入,时间转换
- 其他对象(Runtime)
- 3.1、创建一个ObjectARX应用程序
- java注解
- 算法6.6和6.7---有错误,未改正
- 其他对象(Date)
- Oracle控制台—可视化操作
- 其他对象(Calendar)
- C.8
- 其他对象(Calendar示例)
- Swift 重写类方法
- 风格化福德宫的非官方大哥电饭锅
- c语言练习 10-1. 在字符串中查找指定字符(15)