码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-01-20 12:32:15      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:top   div   log   malloc   data   amp   stdio.h   截图   stream   

栈存储

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;  
    }  
}  
  

 

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

标签:top   div   log   malloc   data   amp   stdio.h   截图   stream   

原文地址:https://www.cnblogs.com/yitou13/p/8320062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!