《数据结构:邓俊辉版》——非递归后序遍历

template <typename T>
void NonPostRecursiveTraverse(CTreeNode<T>* pTreeNode)
{
    printf("\n");
    if (!pTreeNode)
    {
        return;
    }

    g_stack.Push(pTreeNode);
    g_stack.Push(pTreeNode->pRChild);
    pTreeNode = pTreeNode->pLChild;

    while (true)
    {
        while (pTreeNode)
        {
            if (pTreeNode->nData == 1)//last node
            {
                printf("PostNode:%d ", pTreeNode->nData);//visit
                return;
            }

            g_stack.Push(pTreeNode);
            g_stack.Push(pTreeNode->pRChild);
            pTreeNode = pTreeNode->pLChild;
        }

        

        pTreeNode = g_stack.Pop();
        printf("PostNode:%d ", pTreeNode->nData);//visit

        if (g_stack.IsEmpty())
        {
            break;
        }
        if (pTreeNode->pRChild)
        {
            pTreeNode = g_stack.Pop();
        }
        else
        {
            pTreeNode = pTreeNode->pRChild;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/predator-wang/p/11817390.html