题目链接:
二叉树的镜像_牛客题霸_牛客网 (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;
}