题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。
二叉树节点的定义如下:
struct Node
{
int _value;
Node* _left;
Node* _right;
};
我们刚看到这个题目时,肯定感觉一头雾水。不知道镜像是什么意思,我们可以画一个图来观察一下:
我们观察图就可以猜到镜像就类似于镜子中的像。
我们从图中可以观察到:
1.二叉树的数据并没有改变。
2.除根节点相同外,其他的左孩子右孩子交换了位置。
我们可以从观察到的第二点写出代码:
void MirrorImage(Node* node)
{
if ((node == NULL) || (node->_left==NULL && node->_right==NULL))
return;
Node* tmp = node->_left;
node->_left = node->_right;
node->_right = tmp;
if (node->_left)
MirrorImage(node->_left);
if (node->_right)
MirrorImage(node->_right);
}