核心思想:将根节点和左孩子都入栈,置为0,没有左孩子,栈顶元素置为1,右孩子和左孩子入栈,置为0,没有左孩子,置为1,没有右孩子循环出栈打印(打印置为1的)。
void BinaryTreePostOrderNonR(BTNode* root)
{
char tag[64];//数组最大不会超过树的深度
BTNode *cur = root;
Stack st;
StackInit(&st,100);
do
{
for (; cur; cur->lchild)
{
StackPush(&st, cur);//把左孩子和根节点压入栈
tag[st.size - 1] = 0;//置为0
}
if (!StackIsEmpty(&st) && tag[st.size - 1])//栈非空以及标记为1
{
cur = StackTop(&st);
putchar(cur->data);//就打印
StackPop(&st);
}
if (!StackIsEmpty(&st))
{
cur = StackTop(&st);
tag[st.size - 1] = 1;
cur = cur->rchild;
}
} while (!StackIsEmpty(&st));
StackDestory(&st);
}