首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

带有异常的非递归遍历

2013-03-12 
带有错误的非递归遍历#include iostream#include stackusing namespace stdstruct Node{Node* lchild

带有错误的非递归遍历

#include <iostream>#include <stack>using namespace std;struct Node{Node* lchild;Node* rchild;char value;};class list{public:list();void InOrder();void PreOrder();void AfterOrder();private:Node* root;};void list::AfterOrder(){stack<Node*> s;Node *p=root,*temp=NULL;while(p || !s.empty()){while(p){s.push(p);if(p->lchild==temp)break;if(p->rchild)s.push(p->rchild);p=p->lchild;}p=s.top();if(p->lchild && p->lchild!=temp){s.pop();continue;}if(!p->rchild){cout<<p->value;temp=p;s.pop();}p=s.top();s.pop();if(p->rchild==temp){cout<<p->value;temp=p;p=s.top();}}}list::list(){char value;cout<<"请输入您要输入的字母"<<endl;cin>>value;if(cin.fail())return;root=new Node;root->value=value;root->lchild=NULL;root->rchild=NULL;Node *p,*q;while(1){cin>>value;if(value=='#')break;p=new Node;p->lchild=NULL;p->rchild=NULL;p->value=value;q=root;while(q){if(p->value<q->value){if(q->lchild==NULL){q->lchild=p;break;}elseq=q->lchild;}else{if(q->rchild==NULL){q->rchild=p;break;}elseq=q->rchild;}}}cout<<"输入完毕"<<endl;}void list::InOrder(){stack<Node*> s;Node* p=root;while(p || !s.empty()){while(p){if(p->rchild)s.push(p->rchild);s.push(p);p=p->lchild;}if(!s.empty()){p=s.top();s.pop();cout<<p->value<<endl;}if(p->rchild)p=p->rchild;else if(s.empty())break;else {p=s.top();s.pop();}}}void main(){list test;test.InOrder();system("pause");}

      今晚随兴写了非递归程序,就前序没出错,汗。。。

      程序出错是家常便饭了,有时候发现自己逻辑冗余,有时候发现程序真心伤脑,但是让坚持再坚持下。

      等我把错误改了再删贴,希望不要太久。

      已经很晚了,明天早起,fighting!

热点排行