《數據結構:鄧俊輝版》——二叉樹層次遍歷

一、構建一個簡單的隊列操做算法

class CQueue
{
public:
    void Push(CTreeNode<int>*);
    CTreeNode<int>* Pop();
    BOOL IsEmpty();

private:
    CStack<int> stack_1;
    CStack<int> stack_2;
};

void CQueue::Push(CTreeNode<int>* p)
{
    stack_1.Push(p);
}

CTreeNode<int>* CQueue::Pop()
{
    if (stack_2.IsEmpty())
    {
        while (!stack_1.IsEmpty())
        {
            stack_2.Push(stack_1.Pop());
        }
    }
    
    return stack_2.Pop();
}

BOOL CQueue::IsEmpty()
{
    return stack_1.IsEmpty() && stack_2.IsEmpty();
}

二、層次遍歷算法spa

void LevelTraverse(CTreeNode<int>* pTreeNode)
{
    printf("\n");
    CQueue    queue;
    if (!pTreeNode)
    {
        return;
    }

    queue.Push(pTreeNode);

    while (!queue.IsEmpty())
    {
        pTreeNode = queue.Pop();
        if (!pTreeNode)
        {
            continue;
        }

        printf("Level:%d ", pTreeNode->nData);
        queue.Push(pTreeNode->pLChild);
        queue.Push(pTreeNode->pRChild);
    }
}
相關文章
相關標籤/搜索