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; } 

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

相关内容

热门资讯

透视黑科技!德普辅助器辅助器怎... 1、透视黑科技!德普辅助器辅助器怎么用,德普之星辅助器怎么用,辅助教程(有挂介绍);代表性(透视辅助...
透视智能ai!we-poker... 透视智能ai!we-poker正规吗(透视)好像是真的有挂(wepoke教程);1)we-poker...
透视计算!aapoker万能辅... 透视计算!aapoker万能辅助器,aapoker发牌逻辑,透明挂教程(有挂工具)在进入aapoke...
科技通报!(AAPoKER)切... 科技通报!(AAPoKER)切实真的是有挂,aapoker有猫腻,详细教程(有挂教程);玩家必备必赢...
透视好友房!德普之星透视辅助软... 透视好友房!德普之星透视辅助软件是真的吗,德普之星的辅助工具介绍,细节方法(有挂介绍)您好,德普之星...
透视安卓版!wejoker辅助... 透视安卓版!wejoker辅助软件价格(透视)总是是有挂(靠谱教程);1、wejoker辅助软件价格...
透视软件!aapoker公共底... 透视软件!aapoker公共底牌,aapoker辅助器是真的吗,力荐教程(有挂详情)1、aapoke...
透视中牌率!(AApOKER)... 透视中牌率!(AApOKER)切实真的有挂,aapoker辅助工具,微扑克教程(有挂规律)关于aap...
透视安卓版!aa poker透... 透视安卓版!aa poker透视软件,aapoker脚本怎么用,详细教程(有挂介绍)1、aapoke...
分享实测!(aapoKER)真... 分享实测!(aapoKER)真是真的有挂,aapoker猫腻,技巧教程(有挂技巧)是一款可以让一直输...