数据结构#前序遍历建立二叉树 输出中序遍历

栈存储

1.利用递归前序遍历创建二叉树,利用栈存储的方式,中序遍历二叉树并输出。

 1 #include<iostream>
 2 using namespace std;
 3 #include<malloc.h> 
 4 #include<stdio.h>
 5 
 6 typedef struct BiTNode{
 7 char data;
 8     struct BiTNode *lchild,*rchild;
 9 }BiTNode,*BiTree;
10 
11 typedef struct{
12 BiTree *base;
13 BiTree  *top;
14     int stacksize;
15 }SqStack;
16 
17 void creat(BiTree &T){
18     char ch;
19     cin>>ch;
20     T=(BiTree )malloc(sizeof(BiTNode));
21 
22         if(ch=='#')T=NULL;
23         else{
24             T->data=ch;
25             creat(T->lchild);
26             creat(T->rchild);
27         }
28                 
29 }
30 
31 
32 void     InitStack(SqStack &S){
33     S.base=S.top=(BiTree *)malloc(100*sizeof(BiTree));
34     S.stacksize=100;
35 }
36 void Push(SqStack &S,BiTree T){
37 
38     *S.top++=T;
39     
40 }
41 void Pop(SqStack &S,BiTree &T){
42     if(S.top!=S.base)
43     T=*--S.top;
44 }
45 void GetPop(SqStack &S,BiTree &e){
46     e=*(S.top-1);
47 }
48 
49 void Inoder(BiTree T){
50     BiTree p;
51     SqStack S;
52 InitStack(S);
53     Push(S,T);
54     while(S.base!=S.top){
55         GetPop(S,p);
56         while(p){
57             Push(S,p->lchild);
58             GetPop(S,p);
59             
60         }
61         Pop(S,p);
62         if(S.base!=S.top){
63             Pop(S,p);
64             cout<<p->data;
65             Push(S,p->rchild);
66             
67         }
68     }
69     cout<<endl;
70 } 
71 
72 
73 
74 
75 
76 int main(){
77     BiTree T;
78     creat(T);
79     Inoder(T);
80 
81     return 0;
82 } 

 

 

运行截图:输入树,叶子节点以#结束

 

二 递归遍历

此外,利用递归的方式对二叉树,进行前序中序和后序遍历

 

2.使用递归的前序遍历,中序遍历代码。
void PreOrder(BinTree T)//前序遍历二叉树  
{  
    if(T!=NULL)  
    {  
        cout<<T->data;  
        PreOrder(T->lchild);  
        PreOrder(T->rchild);  
    }  
}  
  
void InOrder(BinTree T)//中序遍历二叉树  
{  
    if(T!=NULL)  
    {  
        InOrder(T->lchild);  
        cout<<T->data;  
        InOrder(T->rchild);  
    }  
}  
  
void PostOrder(BinTree T)//后序遍历二叉树  
{  
    if(T!=NULL)  
    {  
        PostOrder(T->lchild);  
        PostOrder(T->rchild);  
        cout<<T->data;  
    }  
}  
  

 

posted @ 2018-01-20 10:45  一头  阅读(7075)  评论(0编辑  收藏  举报