數據結構#前序遍歷建立二叉樹 輸出中序遍歷


棧存儲

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM