void afterOrder(BTreeNode *&tree)
{
BTreeNode *p=tree;
if(tree==NULL)
{
return;
}
int flag[100]={0};
int flagl[100]={0};
int ll=0;
stack<BTreeNode> myStack;
myStack.push(*tree);
while(myStack.size())
{
BTreeNode *pn=&myStack.top();
if(0==flagl[ll] &&0==flag[ll])
{
if(pn->lchild)
{
pn=pn->lchild;
flagl[ll]=1;
myStack.push(*pn);
ll++;
}else if(!pn->lchild)
{
if(0 == flag[ll])
{
if(pn->rchild)
{
flag[ll]=1;
pn=pn->rchild;
myStack.push(*pn);
ll++;
}else if(!pn->rchild){
cout<<pn->data<<" ";
myStack.pop();
ll--;
}
}else if(1 == flag[ll])
{
cout<<pn->data<<" ";
myStack.pop();
flag[ll]=0;
flagl[ll]=0;
ll--;
}
}
}else if(1 == flagl[ll]&& 0 == flag[ll] ){
if(pn->rchild)
{
pn=pn->rchild;
flag[ll]=1;
myStack.push(*pn);
ll++;
}else{
cout<<pn->data<<" ";
myStack.pop();
flag[ll]=0;
flagl[ll]=0;
ll--;
}
} else if(1 == flagl[ll]&& 1 == flag[ll] )
{
cout<<pn->data<<" ";
myStack.pop();
flag[ll]=0;
flagl[ll]=0;
ll--;
}else if(0 == flagl[ll]&& 1 == flag[ll] )
{
cout<<pn->data<<" ";
myStack.pop();
flag[ll]=0;
flagl[ll]=0;
ll--;
}
}
}
树的后序遍历非递归实现
最新推荐文章于 2022-05-12 11:19:04 发布