二叉树的镜像
2017-04-18 20:58
162 查看
剑指offer面试题19:请完成一个函数,输入一个二叉树,该函数输出它的镜像
参考:剑指offer 何海涛
void MirrorRecursively(BinaryTreeNode* pHead){ if(pHead==NULL)return; //如果左右孩子均为空,则直接返回 if(pHead->m_pLeft==NULL&&pHead->m_pRight==NULL)return; //交换根节点的左右孩子 BinaryTreeNode* pTemp=pHead->m_pLeft; pHead->m_pLeft=pHead->m_pRight; pHead->m_pRight=pTemp; //如果左孩子不为空,递归处理 if(pHead->m_pLeft) Mirror(pHead->m_pLeft); //如果右孩子不为空,递归处理 if(pHead->m_pRight) Mirror(pHead->m_pRight); } void MirrorIteratively(BinaryTreeNode* pHead){ if(pHead==NULL)return; //如果左右孩子均为空,则直接返回 if(pHead->m_pLeft==NULL&&pHead->m_pRight==NULL)return; std::stack<BinaryTreeNode*> stackTreeNode; stackTreeNode.push(pHead); while(!stackTreeNode.empty()){ BinaryTreeNode* root = stackTreeNode.top(); stackTreeNode.pop(); BinaryTreeNode* pTemp=root->m_pLeft; root->m_pLeft=root->m_pRight; root->m_pRight=pTemp; if(root->m_pLeft) stackTreeNode.push(root->m_pLeft); if(root->m_pRight) stackTreeNode.push(root->m_pRight); } }
参考:剑指offer 何海涛