题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树结点的定义如下:
struct binaryTreeNode
{
int m_nValue;
binaryTreeNode * m_pLeft;
binaryTreeNode * m_pRight;
};
递归解法:
void mirrorRecursively (binaryTreeNode * pNode)
{
if (NULL == pNode || (NULL == pNode->m_pLeft && NULL == pNode->m_pRight))
return;
binaryTreeNode * pTemp = pNode->m_pLeft;
pNode->m_pLeft = pNode->m_pRight;
pNode->m_pRight = pTemp;
if (NULL != pNode->m_pLeft)
mirrorRecursively (pNode->m_pLeft);
if (NULL != pNode->m_pRight)
mirrorRecursively (pNode->m_pRight);
}
非递归解法:
void mirrorNonrecursive (binaryTreeNode * pNode)
{
if (NULL == pNode)
return;
queue<binaryTreeNode *> tree_queue;
tree_queue.push (pNode);
while ( tree_queue.size() > 0 )
{
binaryTreeNode * deal_node = tree_queue.front(); // 取队列中第一个元素
tree_queue.pop(); // 弹出要处理的元素
// 翻转左右子树
binaryTreeNode * pTemp = deal_node->m_pLeft;
deal_node->m_pLeft = deal_node->m_pRiht;
deal_node->m_pRight = pTemp;
if (NULL != deal_node->m_pLeft)
tree_queue.push (deal_node->m_pLeft);
if (NULL != deal_node->m_pRight)
tree_queue.push (deal_node->m_pRight);
}
}