算法题目---从上往下打印二叉树

来源:互联网 发布:淘宝卖的dw是真的吗 编辑:程序博客网 时间:2024/04/29 23:57

从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。




struct BinaryTreeNode

{
    int m_nValue;
    BinaryTreeNode* m_pLeft;
    BinaryTreeNode* m_pRight;
};

void PrintFromTopToBottom(BinaryTreeNode * pTreeRoot)
{
    if(!pTreeRoot)
        return;
    
    deque<BinaryTreeNode*> dequeTreeNode;
    
    dequeTreeNode.push_back(pTreeRoot);

    while(dequeTreeNode.size())
    {
        BinaryTreeNode *pNode = dequeTreeNode.front();
        dequeTreeNode.pop_front();

        printf("%d ",pNode->m_nValue);

        if(pNode->m_pLeft)
            dequeTreeNode.push_back(pNode->m_pLeft);
        if(pNode->m_pRight)
            dequeTreeNode.push_back(pNode->m_pRight);
    }    
}

BinaryTreeNode* CreateBinaryTreeNode(int value)
{
    BinaryTreeNode* pNode = new BinaryTreeNode();
    pNode->m_nValue = value;
    pNode->m_pLeft = NULL;
    pNode->m_pRight = NULL;

    return pNode;
}

void ConnectTreeNodes(BinaryTreeNode* pParent, BinaryTreeNode* pLeft, BinaryTreeNode* pRight)
{
    if(pParent != NULL)
    {
        pParent->m_pLeft = pLeft;
        pParent->m_pRight = pRight;
    }
}

void DestroyTree(BinaryTreeNode* pRoot)
{
    if(pRoot != NULL)
    {
        BinaryTreeNode* pLeft = pRoot->m_pLeft;
        BinaryTreeNode* pRight = pRoot->m_pRight;

        delete pRoot;
        pRoot = NULL;

        DestroyTree(pLeft);
        DestroyTree(pRight);
    }
}

int main()
{
    BinaryTreeNode* p1 = CreateBinaryTreeNode(1);
    BinaryTreeNode* p2 = CreateBinaryTreeNode(2);
    BinaryTreeNode* p3 = CreateBinaryTreeNode(3);
    BinaryTreeNode* p4 = CreateBinaryTreeNode(4);
    BinaryTreeNode* p5 = CreateBinaryTreeNode(5);
    BinaryTreeNode* p6 = CreateBinaryTreeNode(6);

    ConnectTreeNodes(p1,p2,p3);
    ConnectTreeNodes(p2,p4,p5);
    ConnectTreeNodes(p3,p6,NULL);

    PrintFromTopToBottom(p1);
    printf("\n");
    DestroyTree(p1);
    return 0;    
}