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

数据结构1 - 03-树3 Tree Traversals Again

时间:2020-04-01 17:57:49      阅读:66      评论:0      收藏:0      [点我收藏+]

标签:数据   com   flag   info   技术   printf   tac   左右子树   img   

技术图片

 

 

 1 #include<stdio.h>
 2 #define MAXN 31
 3 int a[MAXN],n,flag[MAXN];
 4 void deal();
 5 int main(){
 6     scanf("%d",&n);
 7     a[0] = n;
 8     flag[0] = n;
 9     deal();
10     return 0;
11 }
12 void deal(){
13     char op[5];
14     int data,stack[MAXN];
15     int i,j,value;
16     stack[0] = 0;
17     for(i=1;i<=n;i++) flag[i]=0;
18     for(i=1;i<=2*a[0];i++){
19         scanf("%s",op);
20         if(op[1]==u){
21             //push 入栈操作
22             scanf("%d",&data);
23             stack[0]++;
24             stack[stack[0]] = data;
25         }
26         else if(op[1]==o){
27             //pop出栈操作
28             value = stack[stack[0]];
29             if(flag[value]==0){
30                 flag[value]=1;
31             }
32             else{
33                 while(flag[value]==1){
34                     printf("%d",value);
35                     n--;
36                     if(n!=0) printf(" ");
37                     else printf("\n");
38                     stack[0]--;
39                     value = stack[stack[0]];
40                 }
41                 flag[value] = 1;
42             }
43         }
44         
45     }
46     for(i=stack[0];i>0;i--){
47         printf("%d",stack[i]);
48         n--;
49          if(n!=0) printf(" ");
50          else printf("\n");
51     }
52 }

这是根据中序压栈的顺序求后序遍历的题目,中序遍历是左子树访问完后,才输出根节点,然后进行右子树的访问;而后序遍历则是需要等到左右子树都访问完毕后再输出根节点,因此中序遍历出栈的时候只能保证该结点的左子树访问完毕,却不知道右子树什么时候才能访问完毕,因此借助栈,将左子树访问完成的结点打上标记,不压出栈中。

数据结构1 - 03-树3 Tree Traversals Again

标签:数据   com   flag   info   技术   printf   tac   左右子树   img   

原文地址:https://www.cnblogs.com/Learn-Excel/p/12614129.html

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