牛客-C语言解法-二叉树的镜像

该文章提供了一个C语言实现的解决方案,用于将给定的二叉树翻转成其镜像结构。通过递归函数`recursion`,实现了二叉树的左右子节点交换,保证了空间复杂度为O(n),同时满足原地操作的要求,即空间复杂度也可达到O(1)。
摘要由CSDN通过智能技术生成

题目链接:

二叉树的镜像_牛客题霸_牛客网 (nowcoder.com)

题目简介:

描述

操作给定的二叉树,将其变换为源二叉树的镜像。

数据范围:二叉树的节点数  0≤n≤1000 , 二叉树每个节点的值 0≤val≤1000

要求: 空间复杂度 O(n) 。本题也有原地操作,即空间复杂度 O(1) 的解法,时间复杂度  O(n)

比如:

源二叉树

镜像二叉树

题目解法:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/*BM33 二叉树的镜像   (反转二叉树)
 *描述
    操作给定的二叉树,将其变换为源二叉树的镜像。
数据范围:二叉树的节点数  0≤n≤1000 , 二叉树每个节点的值  0≤val≤1000
要求: 空间复杂度 O(n)  。本题也有原地操作,即空间复杂度 O(1)  的解法,时间复杂度 O(n) 
*/

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pRoot TreeNode类 
 * @return TreeNode类
 */
void recursion(struct TreeNode* node){
    struct TreeNode* tmpNode;
    if(!node) return;
    tmpNode = node->left;
    node->left = node->right;
    node->right = tmpNode;
    if(node->left)recursion(node->left);
    if(node->right)recursion(node->right);
}

struct TreeNode* Mirror(struct TreeNode* pRoot ) {
    // write code here
    recursion(pRoot);
    return pRoot;
}

/**************************end******************************************/

int main ()
{
    int returnSize = 0;
    int* returnColumnSizes;
    
    // struct TreeNode n22     ={.val =5 , .left = NULL, .right = NULL};
    // struct TreeNode n21     ={.val =4 , .left = NULL, .right = NULL};
    // struct TreeNode n2      ={.val =3 , .left = &n21, .right = &n22};
    // struct TreeNode n1      ={.val =2 , .left = NULL, .right = NULL};
    // struct TreeNode root    ={.val =1 , .left = &n1, .right = &n2};

    struct TreeNode n222    ={.val =1 , .left = NULL, .right = NULL};
    struct TreeNode n221    ={.val =3 , .left = NULL, .right = NULL};
    struct TreeNode n212    ={.val =5 , .left = NULL, .right = NULL};
    struct TreeNode n211    ={.val =7 , .left = NULL, .right = NULL};
    struct TreeNode n22     ={.val =14 , .left = &n221, .right = &n222};
    struct TreeNode n21     ={.val =10 , .left = &n211, .right = &n212};
    struct TreeNode n2      ={.val =12 , .left = &n21, .right =  &n22};


    struct TreeNode n122    ={.val =9 , .left = NULL, .right = NULL};
    struct TreeNode n121    ={.val =11 , .left = NULL, .right = NULL};
    struct TreeNode n112    ={.val =13 , .left = NULL, .right = NULL};
    struct TreeNode n111    ={.val =15 , .left = NULL, .right = NULL};
    struct TreeNode n12     ={.val =6 , .left = &n121, .right = &n122};
    struct TreeNode n11     ={.val =2 , .left = &n111, .right = &n112};
    struct TreeNode n1      ={.val =4 , .left = &n11, .right = &n12};
    struct TreeNode root    ={.val =8 , .left = &n1, .right = &n2};

    // struct TreeNode n1      ={.val =2 , .left = NULL, .right = NULL};
    // struct TreeNode root    ={.val =1 , .left = &n1, .right = NULL};
     
    struct TreeNode* ret = Mirror(&root);
    // for(int i=0; i<returnSize; i++){
    //     printf("\n");
    //     for(int j=0; j<*(returnColumnSizes+i); j++)
    //         printf("%d\t", ret[i][j]);
    // }
    
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值