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

Posted learn-excel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构1 - 03-树3 Tree Traversals Again相关的知识,希望对你有一定的参考价值。

技术图片

 

 

 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("
");
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("
");
51     }
52 }

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

以上是关于数据结构1 - 03-树3 Tree Traversals Again的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 03-树3 Tree Traversals Again (25 分)

数据结构树 —— 编程作业 03:Tree Traversals Again

03-树3 Tree Traversals Again (25分)

03-树3 Tree Traversals Again (25分)

03-树3 Tree Traversals Again (25 分)

03-树3 Tree Traversals Again (25分)