leetcode 2415.反转二叉树的奇数层
创始人
2024-11-06 06:35:03
0

1.题目要求:

给你一棵 完美 二叉树的根节点 root ,请你反转这棵树中每个 奇数 层的节点值。  例如,假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] ,那么反转后它应该变成 [18,29,11,7,4,3,1,2] 。 反转后,返回树的根节点。  完美 二叉树需满足:二叉树的所有父节点都有两个子节点,且所有叶子节点都在同一层。  节点的 层数 等于该节点到根节点之间的边数。 

在这里插入图片描述
在这里插入图片描述
2.全部代码:

/**  * Definition for a binary tree node.  * struct TreeNode {  *     int val;  *     struct TreeNode *left;  *     struct TreeNode *right;  * };  */ //创建队列结构体 typedef struct queue{     struct TreeNode* value;     struct queue* next; }queue_t; //入队 void push(queue_t** head,struct TreeNode* data){     queue_t* newnode = (queue_t*)malloc(sizeof(queue_t));     newnode->value = data;     newnode->next = NULL;     if(*head == NULL){         *head = newnode;         return;     }     queue_t* tail = *head;     while(tail->next != NULL){         tail = tail->next;     }     tail->next = newnode; } //出队 struct TreeNode* pop(queue_t** head){     struct TreeNode* x = (*head)->value;     (*head) = (*head)->next;     return x; } //逆置函数 void reverse(int* number,int left,int right){     while(left <= right){         int temp = number[left];         number[left] = number[right];         number[right] = temp;         left++;         right--;     } } struct TreeNode* reverseOddLevels(struct TreeNode* root) {     queue_t* quence = NULL;     int nextcount = 0;     int count = 1;     int depth = -1;     int* number = (int*)malloc(sizeof(int) * 20000);//层序遍历的数组     int j = 0;     int index = 0;//记录每一层的起点索引     int size = 0;     //开始层序遍历     push(&quence,root);     size++;     while(size != 0){         depth++;         for(int i = 0;i < count;i++){             struct TreeNode* temp = pop(&quence);             number[j] = temp->val;//把层序遍历的节点值存入数组中             j++;             size--;             if(temp->left != NULL){                 push(&quence,temp->left);                 size++;                 nextcount++;             }             if(temp->right != NULL){                 push(&quence,temp->right);                 size++;                 nextcount++;             }         }         //如果高度是偶数,则起点索引加上这一层的结点数,变为下一层的起点索引         if(depth % 2 == 0){             index += count;         }else{             reverse(number,index,j - 1);//如果高度是奇数,则把这一层进行逆置             index += count;         }         //把下一层的结点数赋给count;         count = nextcount;         nextcount = 0;     }     size = 0;     int i = 0;     push(&quence,root);     size++;     //再进行一次层序遍历,把数组的值反过来,赋给树中的结点     while(size != 0){         struct TreeNode* temp = pop(&quence);         size--;         temp->val = number[i];         i++;         if(temp->left != NULL){             push(&quence,temp->left);             size++;         }         if(temp->right != NULL){             push(&quence,temp->right);             size++;         }     }     return root; } 

全部步骤都标在代码中,大家如果觉得好的话,不妨给个免费的赞吧,谢谢了^ _ ^

相关内容

热门资讯

八分钟了解!newpoker怎... 八分钟了解!newpoker怎么安装脚本,哈糖大菠萝能开挂吗,指南书教程(有挂分析)1、哈糖大菠萝能...
方案辅助!微信小程序微乐破解器... 方案辅助!微信小程序微乐破解器2024!解谜真的是有辅助教程(有挂细节)1、进入到微信小程序微乐破解...
第9分钟了解!德普之星有辅助软... 第9分钟了解!德普之星有辅助软件吗,德州局透视脚本,步骤教程(有挂神器)运德普之星有辅助软件吗辅助工...
窍要辅助!洞庭茶苑app辅助!... 窍要辅助!洞庭茶苑app辅助!关于存在有辅助神器(有挂辅助)1.洞庭茶苑app辅助 选牌创建新账号,...
七分钟了解!wepoker怎么... 七分钟了解!wepoker怎么开辅助,wepoker透视脚本免费app,绝活儿教程(有挂细节)1、w...
窍要辅助!嘟咪互动有挂吗!开挂... 窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有挂总结)窍要辅助!嘟咪互动有挂吗!开挂是有辅助软件(有...
1分钟了解!wepoker辅助... 1分钟了解!wepoker辅助器最新版本更新内容,德普之星私人局辅助免费,办法教程(有挂辅助)wep...
大纲辅助!心悦海南苹果版辅助器... 大纲辅助!心悦海南苹果版辅助器!关于是有辅助工具(有挂攻略)1、玩家可以在心悦海南苹果版辅助器线上大...
指南辅助!小程序广东雀神智能插... 指南辅助!小程序广东雀神智能插件安装下载!解谜真的是有辅助技巧(新版有挂)运小程序广东雀神智能插件安...
第九分钟了解!wepoker作... 第九分钟了解!wepoker作弊辅助,wpk辅助购买,步骤教程(新版有挂)1、完成wepoker作弊...