核心思想:将根节点和左孩子都入栈,没有左孩子就出栈顶元素打印,进右孩子,有右孩子就将右孩子(相当于根节点)和左孩子入栈。
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);
}
本文介绍了一种二叉树的中序非递归遍历算法,核心思想是利用栈来辅助遍历过程。首先将根节点及其左孩子入栈,当遇到没有左孩子时,出栈并打印栈顶元素,然后进入右孩子节点的遍历。通过这种方式,实现了对二叉树的有效遍历。
2736

被折叠的 条评论
为什么被折叠?



