递归的代码如下:
void Postorder(BinaryTreeNode *t)
{if(t)
{
Postorder(t->left);
Postorder(t->right);
printf("%c ",t->data);
}
}
非递归的实现如下:
void lrN(BinaryTreeNode *t)
{
BinaryTreeNode *stack[100];
BinaryTreeNode *n;
BinaryTreeNode *p=0;
int index=0;
stack[index]=t;
do
{
while(stack[index]->left)//向左移动
{
n=stack[index]->left;
stack[++index]=n;
}
while(!stack[index]->right||stack[index]->right==p&&index>=0)//访问没有右节点的节点或是右节点被访问过的节点
{
n=stack[index--];
printf("%c ",n->data);
p=n;
}
if(stack[index]->right&&index>=0)
{
stack[index+1]=stack[index]->right;
index++;
}
}
while(index>=0);
}