码迷,mamicode.com
首页 > 编程语言 > 详细

一步两步学算法之树的后序遍历 非递归实现

时间:2015-05-21 16:53:08      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

之前发过一篇博文  代码未测试直接发出来  被 @hoodlum1980

指出有错误 深表惭愧 

参考了他的一篇关于后序遍历的文章

http://www.cnblogs.com/hoodlum1980/p/3901359.html   这是他的博文地址

又写了一遍代码  经测试通过

 

这个比较容易理解  给你一棵树 遍历每个节点 看它的左右儿子是否为空  若都为空或者flag都为1  则输出

flag为1的意思 就是之前已经输出了

详细看代码

 1 typedef struct bintre    
 2 {
 3     int data;
 4     struct bintre *left;
 5     struct bintre *right;
 6     int flag;
 7 }BinTree;
 8 
 9 typedef struct
10 {
11     BinTree *link;
12 }stacktype;
13 
14 void  TravelTree(BinTree *bt)
15 {
16     stacktype stack[30];
17     int top=0;
18     BinTree *p;
19     p=bt;
20     stack[top].link=p;
21     while(top>=0)
22     {
23         if(p->left!=NULL && p->left->flag!=1)        //看左儿子是否为空 或者 已输出 
24         {
25             top++;
26             p=p->left;
27             stack[top].link=p;
28             continue;
29         }
30         
31         if(p->right!=NULL && p->right->flag!=1)        //看右儿子是否为空 或者 已输出
32         {
33             top++;
34             p=p->right;
35             stack[top].link=p;
36             continue;
37         }
38         
39         
40         printf("%d ",stack[top].link->data);
41         p->flag=1;
42         top--;
43         p=stack[top].link;
44         
45     }
46 }

 

一步两步学算法之树的后序遍历 非递归实现

标签:

原文地址:http://www.cnblogs.com/threezj/p/4519953.html

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