题目:
完成一个函数,输入一个二叉树,该函数输入二叉树的镜像。
原二叉树
8
1 2
3 4
则输出
8
2 1
4 3
思路:
前序遍历二叉树的每个结点,如果遍历到的结点有子结点,就交换它的两个左右子节点,当交换完所有非叶子结点的左右子结点之后,就得到了二叉树的镜像。
#include <iostream>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
struct BinaryTreeNode *m_pLeft;
struct BinaryTreeNode *m_pRight;
};
void MirrorRecursively(BinaryTreeNode *pNode) {
if(pNode == NULL)
return;
if(pNode->m_pLeft==NULL && pNode->m_pRight==NULL)
return;
BinaryTreeNode *t = pNode->m_pLeft;
pNode->m_pLeft = pNode->m_pRight;
pNode->m_pRight = t;
MirrorRecursively(pNode->m_pLeft);
MirrorRecursively(pNode->m_pRight);
}