首页 > 其他 > 详细

二叉树非递归后序遍历

时间:2016-03-01 22:14:21      阅读:168      评论:0      收藏:0      [点我收藏+]

其他遍历见:http://www.cnblogs.com/jiu0821/p/4120017.html

算法:

1.指针指向当前树(子树)根节点
2.指针移动到左孩子,直到左孩子为空
3.指针移动到右孩子,直到右孩子为空
4.访问当前节点
5.指针移动到双亲节点,如果双亲为空,则结束;否则:
    (1)如果从左指针回退回来,如果右孩子不空,则指针移动到右孩子,转到第1步继续;否则转第4步继续;
    (2)如果从右指针回退回来,则转第4步继续;

代码:

 1 #include <fstream>
 2 #include <iostream>
 3 #include <cstdio>
 4 
 5 using namespace std;
 6 
 7 struct node
 8 {
 9     char c;
10     struct node *lch,*rch,*parent;
11     void get_c()
12     {
13         putchar(c);
14     }
15 };
16 
17 node* set_tree();
18 void post2order(node* tree);
19 
20 int main(){
21     //freopen("E:\\input.in","r",stdin);
22     //freopen("E:\\output.out","w",stdout);
23     node* tree=set_tree();
24     printf("后序遍历:");
25     post2order(tree);
26     puts("");
27     return 0;
28 }
29 node* set_tree()
30 {
31     node* p,*s;
32     node* gen=new node;
33     gen->c=A;
34     gen->parent=NULL;
35 
36     gen->lch=new node;
37     p=gen->lch;
38     p->parent=gen;
39     p->c=B;
40     p->rch=NULL;
41     p->lch=new node;
42     s=p;
43     p=p->lch;
44     p->parent=s;
45     p->c=D;
46     p->lch=NULL;
47     p->rch=new node;
48     s=p;
49     p=p->rch;
50     p->parent=s;
51     p->c=G;
52     p->lch=NULL;
53     p->rch=NULL;
54 
55     gen->rch=new node;
56     p=gen->rch;
57     p->parent=gen;
58     p->c=C;
59     p->lch=new node;
60     s=p->lch;
61     s->parent=p;
62     s->c=E;
63     s->lch=NULL;
64     s->rch=NULL;
65     p->rch=new node;
66     s=p->rch;
67     s->parent=p;
68     s->c=F;
69     s->lch=NULL;
70     s->rch=NULL;
71 
72     return gen;
73 }
74 void post2order(node *tree){
75     node* p,*s;
76     p=tree;
77     t1:
78     while(p->lch!=NULL) p=p->lch;
79     while(p->rch!=NULL) p=p->rch;
80     t2:p->get_c();
81     if(p->parent==NULL) return;
82     else{
83         s=p;
84         p=p->parent;
85         if(s==p->lch&&p->rch!=NULL){
86             p=p->rch;
87             goto t1;
88         }else
89             goto t2;
90     }
91 }

 

二叉树非递归后序遍历

原文:http://www.cnblogs.com/jiu0821/p/5232381.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!