void inOrder(BiTree T,visit func)
{
stack<BiNodePtr,list<BiNodePtr> > s;
BiNodePtr p=T,q=NULL;
if(!p)return;
while(p){s.push(p);p=p->l;}
while(!s.empty())
{
p=s.top();s.pop();
func(p);
q=p->r;
while(q){s.push(q);q=q->l;}
}
}
void preOrder(BiTree T,visit func)
{
stack<BiNodePtr,list<BiNodePtr> > s;
BiNodePtr p=T,q=NULL;
if(!p)return;
while(p){func(p);s.push(p);p=p->l;}
while(!s.empty()){
p=s.top();s.pop();
q=p->r;
while(q){
func(q);
s.push(q);
q=q->l;
}//while
}//while
}
void postOrder(BiTree T,visit func)
{
stack<BiNodePtr,list<BiNodePtr> >s,s1;
BiNodePtr p=T,q=NULL;
s1.push(NULL);
if(!p)return;
while(p){s.push(p);p=p->l;}
while(!s.empty()){
p=s.top();q=p->r;
if(!q){
func(p);s.pop();
}//if
else{
if(s1.top()!=p){
s1.push(p);
while(q){
s.push(q);q=q->l;
}//while
}//if
else{
s1.pop();s.pop();func(p);
}//else
}//else
}//while
}
树的遍历:非递归算法包含后序遍历的非递归算法
最新推荐文章于 2024-07-17 12:11:36 发布