leetcode面试题27(二叉树的镜像)--C语言实现

微笑、不失礼 提交于 2020-08-17 21:04:14

求:

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

例如输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9
镜像输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

 

示例 1:

输入:root = [4,2,7,1,3,6,9]
输出:[4,7,2,9,6,3,1]
 

限制:

0 <= 节点个数 <= 1000

注意:本题与主站 226 题相同:https://leetcode-cn.com/problems/invert-binary-tree/

 

解:

思路:从根节点开始,分别交换树中每一个节点的左右节点的指针,递归调用完成后得到的树就是原树的镜像翻转树。分别判断根节点为空、根节点不空但左右节点均为空、根节点不空但左右节点有一个为空、根节点不空但左右节点均不为空的情况下,应该怎么操作指针即可。最后返回根节点的指针。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
 
void   Mirror(  struct   TreeNode* root){
      if  (root==NULL || (root->left==NULL && root->right==NULL))    return  ;
      if  (root->left==NULL || root->right==NULL){
          if  (root->left==NULL){
            root->left = root->right;
            root->right=NULL;
        }  else  {
            root->right = root->left;
            root->left=NULL;
        }
    }
     if  (root->left!=NULL && root->right!=NULL){
         struct   TreeNode* tmp = root->right;
        root->right = root->left;
        root->left = tmp;
    }
    Mirror(root->left);
    Mirror(root->right);
}
 
struct  TreeNode* mirrorTree( struct  TreeNode* root){
     if (root==NULL)   return  root;
    Mirror(root);
     return  root;   
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!