非递归实现中序,先序,后序遍历二叉树部分代码

Posted letianpaiai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非递归实现中序,先序,后序遍历二叉树部分代码相关的知识,希望对你有一定的参考价值。

/*层次遍历,其实就是一个队列,先把根节点压入,之后进入循环,每次先弹出一个根节点,在输出值后,将其左右子树分别压入队列*/
void InorderTraversal(BinTree BT) {
    BinTree T;
    Stack S = CreateStack(100);//创建并初始化堆栈

    while (T || !IsEmpty(S)) {
        while (T) {//一直向左并将沿途结点压入堆栈
            Push(S, T);
            T = T->Left;
        }

        if (!IsEmpty(S)) {
            T = Pop(S);
            printf(" %c", T->Data);
            T = T->Right;
        }
    }

}

void PreorderTraversal(BinTree BT) {
    BinTree T;
    Stack S = CreateStack(100);//创建并初始化堆栈

    while (T || !IsEmpty(S)) {
        while (T) {//一直向左并将沿途结点压入堆栈
            printf(" %c", T->Data);
            Push(S, T);
            T = T->Left;
        }

        if (!IsEmpty(S)) {
            T = Pop(S);
            T = T->Right;
        }
    }
}
//这个其实举一个例子,就很清楚过程了
//因为堆栈后进先出,那根节点先压入,再右子树压入,最后左子树即可
//这样输出顺序就是 左 右 根
void PostorderTraversal(BinTree BT) { BinTree T; Stack S = CreateStack(100); Stack Q = CreateStack(100);//后序遍历 路径存储 while (T || !IsEmpty(S)) { while (T) { Push(S, T); Push(Q, T); T = T->Right; } if (!IsEmpty(S)) { T = Pop(S); T = T->Left; } } while (!IsEmpty(Q)) {//输出的就是后序遍历结果 T = Pop(Q); printf(" %c", T->Data); } }

 

以上是关于非递归实现中序,先序,后序遍历二叉树部分代码的主要内容,如果未能解决你的问题,请参考以下文章

二叉树遍历(先序,中序,后序,层序)递归和非递归形式

用递归算法先序中序后序遍历二叉树

二叉树遍历(先序中序后序)

算法练习28:非递归方式遍历二叉树的先序中序后序

二叉树遍历的递归实现(先序中序后序和层次遍历)

用递归和非递归方式实现二叉树的先序中序后序遍历