题目:完成一个函数,输入一个二叉树,该函数输出它的镜像。
思路:递归的每次交换一个结点的左右子树。
#include <iostream>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode *m_pLeft;
BinaryTreeNode *m_pRight;
};
BinaryTreeNode *CreateTree() {
int a;
cin >> a;
if (a != -1) {
BinaryTreeNode *root = new BinaryTreeNode;
root->m_nValue = a;
cout << "请输入" << a << "的左结点:";
root->m_pLeft = CreateTree();
cout << "请输入" << a << "的右结点:";
root->m_pRight = CreateTree();
return root;
}
return NULL;
}
void printtree(BinaryTreeNode *root) {
if (root == NULL)
return;
cout << root->m_nValue << " ";
printtree(root->m_pLeft);
printtree(root->m_pRight);
}
void MirrorRecursively(BinaryTreeNode *root) {
if (root == NULL)
return;
if (root->m_pLeft == NULL && root->m_pRight == NULL)
return;
BinaryTreeNode *temp = root->m_pLeft;
root->m_pLeft = root->m_pRight;
root->m_pRight = temp;
if (root->m_pLeft != NULL)
MirrorRecursively(root->m_pLeft);
if (root->m_pRight != NULL)
MirrorRecursively(root->m_pRight);
}
int main() {
BinaryTreeNode *root = CreateTree();
MirrorRecursively(root);
printtree(root);
cout << endl;
return 0;
}