/****************************************************************** 题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。 ******************************************************************/ #include<stdio.h> struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; BinaryTreeNode* createBinaryTreeNode(int value) { BinaryTreeNode* pNewNode = new BinaryTreeNode(); pNewNode->m_nValue = value; pNewNode->m_pLeft = NULL; pNewNode->m_pRight = NULL; return pNewNode; } void connectBinaryTreeNode(BinaryTreeNode* pParent,BinaryTreeNode* pLeftChild, BinaryTreeNode* pRightChild) { if(!pParent) return; pParent->m_pLeft = pLeftChild; pParent->m_pRight = pRightChild; } void ptintBinaryTreeNode(BinaryTreeNode* pNode) { if(pNode) { printf("Node‘s valuse is %d\n",pNode->m_nValue); if(pNode->m_pLeft) printf("Node‘s left child value is %d\n",pNode->m_pLeft->m_nValue); else printf("Node‘s left child value is NULL\n"); if(pNode->m_pRight) printf("Node‘s right child value is %d\n",pNode->m_pRight->m_nValue); else printf("Node‘s right child value is NULL\n"); } else { printf("Node‘s valuse is NULL\n"); } } void printTree(BinaryTreeNode* pRoot) { if(pRoot) { ptintBinaryTreeNode(pRoot); if(pRoot->m_pLeft) printTree(pRoot->m_pLeft); if(pRoot->m_pRight) printTree(pRoot->m_pRight); } } void mirrorOfBinaryTree(BinaryTreeNode* pRoot) { if(pRoot == NULL) return; BinaryTreeNode* pNode; pNode = pRoot->m_pLeft; pRoot->m_pLeft = pRoot->m_pRight; pRoot->m_pRight = pNode; if(pRoot->m_pLeft) mirrorOfBinaryTree(pRoot->m_pLeft); if(pRoot->m_pRight) mirrorOfBinaryTree(pRoot->m_pRight); } //单元测试 void test1() { BinaryTreeNode* pNode1 = createBinaryTreeNode(8); BinaryTreeNode* pNode2 = createBinaryTreeNode(6); BinaryTreeNode* pNode3 = createBinaryTreeNode(10); BinaryTreeNode* pNode4 = createBinaryTreeNode(5); BinaryTreeNode* pNode5 = createBinaryTreeNode(7); BinaryTreeNode* pNode6 = createBinaryTreeNode(9); BinaryTreeNode* pNode7 = createBinaryTreeNode(11); connectBinaryTreeNode(pNode1,pNode2,pNode3); connectBinaryTreeNode(pNode2,pNode4,pNode5); connectBinaryTreeNode(pNode3,pNode6,pNode7); mirrorOfBinaryTree(pNode1); printTree(pNode1); } int main() { test1(); return 0; }
void MirrorIteratively(BinaryTreeNode* pRoot) { if(pRoot == NULL) return; std::stack<BinaryTreeNode*> stackTreeNode; stackTreeNode.push(pRoot); while(stackTreeNode.size() > 0) { BinaryTreeNode *pNode = stackTreeNode.top(); stackTreeNode.pop(); BinaryTreeNode *pTemp = pNode->m_pLeft; pNode->m_pLeft = pNode->m_pRight; pNode->m_pRight = pTemp; if(pNode->m_pLeft) stackTreeNode.push(pNode->m_pLeft); if(pNode->m_pRight) stackTreeNode.push(pNode->m_pRight); } }
==参考剑指offer原文:http://blog.csdn.net/walkerkalr/article/details/21042383