void
preOrderNoRe(BiTree T)
// 前序遍历
54 {
55 Stack * st;
56 initstack(st);
57 BiTree p;
58 p = T;
59 while (p != NULL ||! isempty(st))
60 {
61 while (p != NULL)
62 {
63 cout << p -> data << " " ;
64 push(st,p);
65 p = p -> lchild;
66 }
67 if ( ! isempty(st))
68 {
69 p = pop(st);
70 p = p -> rchild;
71 }
72
73 }
74 }
75 void inOrderNoRe(BiTree T) //中序遍历
76 {
77 Stack * st;
78 initstack(st);
79 BiTree p;
80 p = T;
81 while (p != NULL ||! isempty(st))
82 {
83 while (p != NULL)
84 {
85 push(st,p);
86 p = p -> lchild;
87 }
88 if ( ! isempty(st))
89 {
90 p = pop(st);
91 cout << p -> data << " " ;
92 p = p -> rchild;
93 }
94
95 }
96 }
97
54 {
55 Stack * st;
56 initstack(st);
57 BiTree p;
58 p = T;
59 while (p != NULL ||! isempty(st))
60 {
61 while (p != NULL)
62 {
63 cout << p -> data << " " ;
64 push(st,p);
65 p = p -> lchild;
66 }
67 if ( ! isempty(st))
68 {
69 p = pop(st);
70 p = p -> rchild;
71 }
72
73 }
74 }
75 void inOrderNoRe(BiTree T) //中序遍历
76 {
77 Stack * st;
78 initstack(st);
79 BiTree p;
80 p = T;
81 while (p != NULL ||! isempty(st))
82 {
83 while (p != NULL)
84 {
85 push(st,p);
86 p = p -> lchild;
87 }
88 if ( ! isempty(st))
89 {
90 p = pop(st);
91 cout << p -> data << " " ;
92 p = p -> rchild;
93 }
94
95 }
96 }
97
- void PostOrder_Nonrecursive1(BiTree T) // 后序遍历的非递归
- {
- stack<BiTree> S;
- BiTree curr = T ; // 指向当前要检查的节点
- BiTree previsited = NULL; // 指向前一个被访问的节点
- while(curr != NULL || !S.empty()) // 栈空时结束
- {
- while(curr != NULL) // 一直向左走直到为空
- {
- S.push(curr);
- curr = curr->lchild;
- }
- curr = S.top();
- // 当前节点的右孩子如果为空或者已经被访问,则访问当前节点
- if(curr->rchild == NULL || curr->rchild == previsited)
- {
- cout<<curr->data<<" ";
- previsited = curr;
- S.pop();
- curr = NULL;
- }
- else
- curr = curr->rchild; // 否则访问右孩子
- }
- }