求”“”非递归“”“”后序遍历二叉链表算法解决办法
求”“”非递归“”“”后序遍历二叉链表算法
老师给的思路:
1.栈的初始化;
2:循环到root为空且STACK为空;
2.1: 将root连同flag=1压栈;
遍历root左子树;
2.2:当栈s非空且栈顶为标志2时候,出栈并输出栈顶节点;
2.3:栈非空将栈顶标志改为2,准备遍历栈顶节点的右子数;
我按照这个写的code:
大神们看看我哪儿错啦!maxlen 前面用宏定义过的;
高人指点一下,这是我们数据结构实验的一小部分,今天卡啦,跪求!!!
------解决方案--------------------
你的进栈出栈会出现死循环的,你把一个出栈后的元素又重新把它进栈了,你再改改,要出去就不帮你写了,自己动手进步快啊
老师给的思路:
1.栈的初始化;
2:循环到root为空且STACK为空;
2.1: 将root连同flag=1压栈;
遍历root左子树;
2.2:当栈s非空且栈顶为标志2时候,出栈并输出栈顶节点;
2.3:栈非空将栈顶标志改为2,准备遍历栈顶节点的右子数;
我按照这个写的code:
void npost_order(BTtree *T)//非递归后根遍历二叉树
{
struct STACK
{
BTtree* tree;
int flag;
} S[maxlen];
int top=maxlen;
while(T!=NULL||top!=maxlen)
{
while(T!=NULL)
{
top--;
S[top].tree=T;
S[top].flag=1;
T=T->lchild;
}
if(top!=maxlen)
{
if(S[top].flag==2)
{
T=S[top++].tree;
cout << T->data;
}
else
{
S[top].flag=2;
T=S[top].tree->rchild;
}
}
}
}
大神们看看我哪儿错啦!maxlen 前面用宏定义过的;
高人指点一下,这是我们数据结构实验的一小部分,今天卡啦,跪求!!!
------解决方案--------------------
你的进栈出栈会出现死循环的,你把一个出栈后的元素又重新把它进栈了,你再改改,要出去就不帮你写了,自己动手进步快啊