核心思想:将根节点和左孩子都入栈,没有左孩子就出栈顶元素打印,进右孩子,有右孩子就将右孩子(相当于根节点)和左孩子入栈。
void BinaryTreeInOrderNonR(BTNode* root)
{
BTNode *cur = root;//root是根节点
Stack st;
StackInit(&st, 100);
while (cur || !StackIsEmpty(&st))
{
for (; cur; cur->lchild)//遍历根结点和左孩子
{
StackPush(&st, cur);//入栈
}
cur = StackTop(&st);//没有左孩子,那么指向栈顶元素
if (cur)
{
putchar(cur->data);//输出左孩子
StackPop(&st);
cur=cur->rchild;//遍历右孩子
}
}
StackDestory(&st);
}