面试题27:二叉树的镜像

题目

请完成一个函数,输入一颗二叉树,该函数输出它的镜像。


互为镜像的二叉树

解题思路

  1. 先前序遍历这棵树的每个节点
  2. 如果遍历到的节点有子节点,就交换它的两个子节点
  3. 当交换完所有非叶节点的左右子节点之后,就得到树的镜像。

代码

  • 先交换结点的左右子树,递归这个过程直到左右子树为空。
void  MirrorRecursively(BinaryTreeNode *root)
        {
            //先序遍历这棵树的每个节点
            if(!root)
            {
                return ;
            } //没有左右子节点
            if(root->left == NULL && root->right == NULL)
            {
                return ;
            } //交换左右子节点
            BinaryTreeNode *pNode = root->left;
            root->left = root->right;
            root->right = pNode;
            if(root->left)
            {
                MirrorRecursively(root->left);
            }
            if(root->right)
            {
                MirrorRecursively(root->right);
            }
        }

完整代码见GitHub

你可能感兴趣的:(面试题27:二叉树的镜像)