typedef struct BiTNode { char data; struct BiTNode *lchild, *rchild; ///左右孩子 } BiTNode,*BiTree; void PreOrder_Nonrecursive1(BiTree T) ///先序遍历的非递归 { if(!T) return ; ///如果结点为空,终止 stack<BiTree> s; ///用栈存储 BiTree curr = T; ///使用中间量传递数据 while(curr != NULL || !s.empty()) { while(curr != NULL) ///一直循环查找左结点 { cout<<curr->data<<" "; s.push(curr); curr = curr->lchild; } if(!s.empty()) ///当左结点为空了,开始查找右结点 { curr = s.top(); s.pop(); curr = curr->rchild; } } } void InOrderTraverse(BiTree T) /// 中序遍历的非递归 { if(!T) return ; stack<BiTree> s; BiTree curr = T->lchild; /// 先指向当前要检查的节点 s.push(T); while(curr != NULL || !s.empty()) { while(curr != NULL) /// 一直向左走 { s.push(curr); curr = curr->lchild; } curr = s.top(); s.pop(); cout<<curr->data<<" "; curr = curr->rchild; } } void PostOrder_Nonrecursive(BiTree T) ///后序遍历的非递归 双栈法 { stack<BiTree> s1 , s2; BiTree curr ; /// 指向当前要检查的节点 s1.push(T); while(!s1.empty()) /// 栈空时结束 { curr = s1.top(); s1.pop(); s2.push(curr); if(curr->lchild) s1.push(curr->lchild); if(curr->rchild) s1.push(curr->rchild); } while(!s2.empty()) { printf("%c ", s2.top()->data); s2.pop(); } }
浙公网安备 33010602011771号