19 темы бинарное дерево зеркало

////////////////////////////////////////////////// ///////////////////////////////////
// 1. название бинарного изображения 19
// выполнить функцию , двоичный вход, выход функции на ее зеркало
// временной сложности: о (п), пространственная сложность: O (1) -> но некоторая рекурсивная параметр функции , как потребление

19. бинарного дерева зеркало


аннулированию MirrorOfBinaryTree (BinarySeachTreeNode < INT > * pRoot) 
{ 
    если (NULL == pRoot || (NULL == pRoot-> m_pLeftNode && NULL == pRoot-> m_pRightNode)) 
    { 
        вернуться ; 
    } 

    // 交换左右节点 
    BinarySeachTreeNode < INT > * pTmpNode = pRoot-> m_pLeftNode; 
    pRoot -> m_pLeftNode = pRoot-> m_pRightNode; 
    pRoot -> m_pRightNode = pTmpNode; 

    если (pRoot-> m_pLeftNode) 
    { 
        MirrorOfBinaryTree (pRoot -> m_pLeftNode); 
    } 

    Если (pRoot->m_pRightNode) 
    { 
        MirrorOfBinaryTree (PROOT -> m_pRightNode); 
    } 
} 

// бинарное изображение: нерекурсивна
 // временная сложность: О (п), пространственная сложность: O (n-) 
недействительными MirrorOfBinaryTree_1 (BinarySeachTreeNode < INT > * PROOT) 
{ 
    IF (PROOT || == NULL (NULL pRoot- ==> == NULL && m_pLeftNode pRoot-> m_pRightNode)) 
    { 
        возвращение ; 
    } 

    очереди <BinarySeachTreeNode < INT > *> stQueue; 
    stQueue.push (PROOT);     // очереди FIFO 

    это время (! stQueue.empty ()) 
    {
        pRoot = stQueue.front (); 
        stQueue.pop (); 

        // 交换子节点 
        BinarySeachTreeNode < INT > * pTmpNode = pRoot-> m_pLeftNode; 
        pRoot -> m_pLeftNode = pRoot-> m_pRightNode; 
        pRoot -> m_pRightNode = pTmpNode; 

        если (pRoot-> m_pLeftNode) 
        { 
            stQueue.push (pRoot -> m_pLeftNode); 
        } 

        Если (pRoot-> m_pRightNode) 
        { 
            stQueue.push (pRoot -> m_pRightNode); 
        } 
    } 
}

недействительным MirrorOfBinaryTreeTestFunc () 
{ 
    соиЬ << " \ п \ п --------------- MirrorOfBinaryTreeTestFunc Начало --------------> " << епсИ;
    INT aiArray [] = { 8 , 6 , 10 , 5 , 7 , 9 , 11 , 12 };
    INT Ilen = SizeOf (aiArray) / SizeOf ( INT ); 
    TRAVERSAL_ARRAY (aiArray, Ilen); 

    // 1.建立一个二叉树 
    CBinarySearchTree < INT > * Ptree =новый CBinarySearchTree < INT > ();
    если (NULL == Ptree) 
    { 
        возврата ; 
    } 

    Для ( INT I = 0 ; г <Ilen; я ++ ) 
    { 
        Ptree -> Вставить (aiArray [I]); 
    } 

    Ptree -> Прослеживание (); 
    Ptree -> Прослеживание (TRAVERSAL_TYPE_RECUR_PRE_ORDER); 

    // 2.二叉树镜像
    Const BinarySeachTreeNode < INT > * pRoot = pTree-> GetTreeRootNode (); 
    MirrorOfBinaryTree (const_cast<BinarySeachTreeNode < INT > *> (pRoot));   // 去Const属性 
    pTree-> Traversal (); 

    MirrorOfBinaryTree_1 (const_cast <BinarySeachTreeNode < INT > *> (pRoot)); 
    Ptree -> Прослеживание (); 

    // 3.释放内存
    SAVE_DELETE (Ptree); 

    соиЬ << " \ п \ п --------------- MirrorOfBinaryTreeTestFunc End --------------> " << епсИ; 

}

рекомендация

отwww.cnblogs.com/yzdai/p/11258713.html