////////////////////////////////////////////////// ///////////////////////////////////
// 1. the title of the binary image 19
// complete a function , a binary input, the output of the function on its mirror
// time complexity: O (n), the spatial complexity: O (1) -> but some recursive function parameter like consumption
void MirrorOfBinaryTree(BinarySeachTreeNode<int>* pRoot) { if (NULL == pRoot || (NULL == pRoot->m_pLeftNode && NULL == pRoot->m_pRightNode)) { return; } // 交换左右节点 BinarySeachTreeNode<int>* pTmpNode = pRoot->m_pLeftNode; pRoot->m_pLeftNode = pRoot->m_pRightNode; pRoot->m_pRightNode = pTmpNode; if (pRoot->m_pLeftNode) { MirrorOfBinaryTree(pRoot->m_pLeftNode); } if (pRoot->m_pRightNode) { MirrorOfBinaryTree (PROOT -> m_pRightNode); } } // binary image: non-recursive // time complexity: O (n), the spatial complexity: O (n-) void MirrorOfBinaryTree_1 (BinarySeachTreeNode < int > * PROOT) { IF (PROOT || == NULL (NULL pRoot- ==> == NULL && m_pLeftNode pRoot-> m_pRightNode)) { return ; } queue <BinarySeachTreeNode < int > *> stQueue; stQueue.push (PROOT); // queue FIFO the while (! stQueue.empty ()) { pRoot = stQueue.front(); stQueue.pop(); // 交换子节点 BinarySeachTreeNode<int>* pTmpNode = pRoot->m_pLeftNode; pRoot->m_pLeftNode = pRoot->m_pRightNode; pRoot->m_pRightNode = pTmpNode; if (pRoot->m_pLeftNode) { stQueue.push(pRoot->m_pLeftNode); } if (pRoot->m_pRightNode) { stQueue.push(pRoot->m_pRightNode); } } } void MirrorOfBinaryTreeTestFunc() { cout << "\n\n --------------- MirrorOfBinaryTreeTestFunc Start -------------->" << endl; int aiArray[] = {8, 6, 10, 5, 7, 9, 11, 12}; int iLen = sizeof(aiArray) / sizeof(int); TRAVERSAL_ARRAY(aiArray, iLen); // 1.建立一个二叉树 CBinarySearchTree<int>* pTree = new CBinarySearchTree<int>(); if (NULL == pTree) { return; } for (int i = 0; i < iLen; i++) { pTree->Insert(aiArray[i]); } pTree->Traversal(); pTree->Traversal(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->Traversal(); // 3.释放内存 SAVE_DELETE(pTree); cout << "\n\n --------------- MirrorOfBinaryTreeTestFunc End -------------->" << endl; }