之前发过一篇博文 代码未测试直接发出来 被 @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 }
时间: 2024-10-11 04:05:20