二叉树的镜像,输入一颗二叉树,输出它的镜像
用队列进行广度遍历,每到一个节点,调换左右子树位置即可
void MirrorRecursively(BinaryTreeNode *pNode)//自写
{
if (pNode == nullptr) return;
BinaryTreeNode* pTemp = pNode->m_pLeft;
pNode->m_pLeft = pNode->m_pRight;
pNode->m_pRight = pTemp;
if (pNode->m_pLeft!=nullptr)
MirrorRecursively(pNode->m_pLeft);
if (pNode->m_pRight!=nullptr)
MirrorRecursively(pNode->m_pRight);
return;
}
void MirrorIteratively(BinaryTreeNode* pRoot)//自写
{
if (pRoot == nullptr) return;
std::queue<BinaryTreeNode*> m_queue;
m_queue.push(pRoot);
while (m_queue.size() > 0)
{
BinaryTreeNode* pCurrNode = m_queue.front();
m_queue.pop();
if (pCurrNode->m_pLeft != nullptr) m_queue.push(pCurrNode->m_pLeft);
if (pCurrNode->m_pRight != nullptr) m_queue.push(pCurrNode->m_pRight);
BinaryTreeNode* pTemp = pCurrNode->m_pLeft;
pCurrNode->m_pLeft = pCurrNode->m_pRight;
pCurrNode->m_pRight = pTemp;
}
return;
}