typedef struct BTNode(){
char data;
struct BTNode *lchild;
struct BTNode *rchild;
}BTNode;
void preorder(BTNode *p){
Visit(p);
preorder(p->lchild);
preorder(p->rchild);
}
void inorder(BTNode *p){
inorder(p->lchild);
Visit(p);
inorder(p->rchild);
}
void postorder(BTNode *p){
postorder(p->lchild);
postorder(p->child);
Visit(p);
}
void LevelOrder(BTNode *p){
int front, rear;
BTNode *que[maxSize];
front=rear=0;
BTNode *q;
if(p!=NULL){
rear = (rear+1)%maxSize;
que[rear] = p;
while(front!=rear){
front = (front+1)%maxSize;
q = que[front];
if(q->lchild!=NULL){
rear = (rear+1)%maxSize;
que[rear] = q->lchild;
}
if(q->rchild!=NULL){
rear = (rear+1)%maxSize;
que[rear] = p->lchild;
}
}
}
}
void preorderPlus(BTNode *bt){
if(bt!=NULL){
BTNode *Stack[maxSize];
int top=-1;
BTNode *q;
Stack[top++] = bt;
if(top!=-1){
q=Stack[top--];
Visit(q);
if(q->rchild!=NULL){
Stack[top++]=q-rchild;
}
if(q->lchild!=NULL){
Stack[top++]=q-lchild;
}
}
}
}
void inorderPlus(BTNode *bt){
if(bt!=NULL){
BTNode *Stock[maxSize];
int top=-1;
BTNode *q;
q=bt;
while(top!=-1||q!=NULL){
while(q!=NULL){
Stack[++top]=q;
q=q->lchild;
}
if(top!=-1){
q=Stack[top--];
Visit(q);
q=q-rchild;
}
}
}
}
void postorderPlus(BTNode *bt){
if(bt!=NULL){
BTNode *Stack1[maxSize]j; int top1=-1;
BTNode *Stack2[maxSize]j; int top2=-1;
BTNode *q = NULL;
Stack1[++top1]=bt;
while(top1 != -1){
q = Stack1[top--];
Stack2[top++] = q;
if(q->lchild != NULL){
Stack1[++top1] = p->lchild;
}
if(q->rchild != NULL){
Stack1[++top1] = p->rchild;
}
}
while(top2 != 1){
q = Stack2[top2--];
Visit(q);
}
}
}
typedef struct TBTNode(){
char data;
int ltag,rtag;
struct TBTNode *lchild;
struct TBTNode *rchild;
}TBTNode;
void InThread(TBTNode *p, TBTNode *&pre){
if(p!=NULL){
InThread(p->lchild, pre);
if(p->lchild==NULL){
p->lchild=pre;
p->ltag=1;
}
if(pre!=NULL&&pre->child=NULL){
pre->rchild=p;
pre->rtag=1;
}
pre = p;
InThread(p->rchild,pre);
}
}
void createInThread(TBTNode *roor){
TBTNode *pre=NULL;
if(root!=NULL){
InThread(root, pre);
pre->rchild=NULL;
pre->rtag=1;
}
}
TBTNode *First(TBTNode *p){
while(p->ltag==0)
p=p->lchild;
return p;
}
TBTNode *Next(TBTNode *p){
if(p->rtag==0)
return First(p->rchild);
else
return p->rchild;
}
void Inorder (TBTNode *root){
for(TBTNode *p=First(root); p!=NULL; p=Next(p))
Visit(p);
}
标题