一、递归实现
1.前序遍历每个节点
2.如果遍历到的结点有子节点,就交换它的两个子结点
3.交换完所有非子结点的左右结点之后,就得到镜像
代码:
- void MirroRecursively(BinaryTreeNode *pNode)
- {
- if(NULL == pNode)
- return;
- if(NULL == pNode->Left && NULL == pNode->Right)
- return;
- BinaryTreeNode *pTemp = pNode->Left;
- pNode->Left = pNode->Right;
- pNode->Right = pTemp;
- if(pNode->Left)
- MirroRecursively(pNode->Left);
- if(pNode->Right)
- MirroRecursively(pNode->Right);
- }
循环
- void MirrorNonRecurively(BinaryTreeNode *pNode)
- {
- if(NULL == pNode)
- return;
- stack<BinaryTreeNode *> stackTreeNode;
- stackTreeNode.push(pNode);
- while(stackTreeNode.size())
- {
- BinaryTreeNode *pNode = stackTreeNode.top();
- stackTreeNode.pop();
- if(NULL != pNode->Left || NULL != pNode->Right)
- {
- BinaryTreeNode *pTemp = pNode->Left;
- pNode->Left = pNode->Right;
- pNode->Right = pTemp;
- }
- if(NULL != pNode->Left)
- stackTreeNode.push(pNode->Left);
- if(NULL != pNode->Right)
- stackTreeNode.push(pNode->Right);
- }
- }