永发信息网

为什么数的中序遍历非递归栈有错

答案:1  悬赏:40  手机版
解决时间 2021-04-21 05:22
  • 提问者网友:世勋超人
  • 2021-04-20 15:45

# include<iostream.h>
# include<new.h>
# include<stdlib.h>
struct tree
{
char date;
tree *lchild;
tree *rchild;

};
struct stack
{
tree *base;
tree *top;
int tacksize;
};
void Initstack(stack S)
{
S.base=new tree[50];
S.top=S.base;
S.tacksize=50;


}
bool Push(stack &S,tree *&e)

{
if(S.top-S.base>=S.tacksize)


return false;
else
{
*S.top=*e;
S.top++;
cout<<S.top->date<<endl;
cout<<"ri"<<endl;


return true;
}

}
bool Pop(stack &S,tree *&e)
{
if(S.base==S.top)
return false;
S.top--;
*e=*S.top;
return true;
}

void CreatTree(tree *&T)
{
char ch;
cin>>ch;
if(ch=='#')T=NULL;
else
{
if(!(T=new tree)) exit(-1);
T->date=ch;
CreatTree(T->lchild);
CreatTree(T->rchild);
}

}
void PreOrde(tree *&T)
{
if(T)
{
cout<<T->date<<endl;

PreOrde(T->lchild);

PreOrde(T->rchild);
}

}

void InOrder(tree*&T)
{
if(T)
{
InOrder(T->lchild);
cout<<T->date<<endl;
InOrder(T->rchild);
}
}

void InOrdetrave(tree *T)
{
stack S;
tree *p;
p=T;

Initstack(S);

if(T)
{
while(p||Empty(S)==0)
{

if(p)
{
Push(S,p);p=p->lchild;


}
else
{
Pop(S,p);
cout<<p->date<<endl;
p=p->rchild;
}

}

}
}

int main()
{
tree *T;
CreatTree(T);
//PreOrde(T);

cout<<endl;
//PreOrdetrave(T);
cout<<endl;
//InOrder(T);
InOrdetrave(T);


cout<<endl;


return 0;
}


最佳答案
  • 五星知识达人网友:妄饮晩冬酒
  • 2021-04-20 15:51
你好 楼主。
很幸运的看到你的问题。
但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。
可能是你问的问题有些专业了,没人会。或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也比较热心,可能能快点帮你解决问题。
希望我的回答也能够帮到你!
祝你好运。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯