这是《剑指Offer》第 27 题:

请完成一个函数,输入一棵二叉树,该函数输出它的镜像。二叉树节点的定义如下:

struct TreeNode {  
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};

这道题主要是要搞清楚“镜像”的概念。如果搞不清楚的情况下,我们可以借助画图的方式去理解。 我们先在纸上画一棵二叉树,然后把这个纸翻过来看,就可以看到这棵树的镜像了。因为我们这个 是博客,所以就不画了,有兴趣的同学可以自己试试。我们在这里直接说结论:一个物体的镜像就是把 这个物体沿其中轴线左右对调。对于一棵二叉树而言,它的镜像就是要调换它每一个节点的左右子树

知道了这个之后,我们就不难写出代码了。我们要做的就是遍历整个二叉树,然后对于遍历到的每个节点, 交换它的左右子树。我这边为了练习,写了递归循环两个版本,大家可以参考。

以上。