题目链接:反转二叉树的奇数层
题干解析:
题意很简单,对完美二叉树的奇数层进行反转,注意第一层的层数是0!
解题思路:
这个题需要对数的每一层进行操作,很自然想到需要对数进行层序遍历,在遍历的过程中,如果该层是奇数层,则在更新队列的过程中对该层的节点进行保存,并进行反转。当然也可以不使用队列,使用两个数组也是ok的,一个临时数组用于记录下一层的节点信息,在本层节点进行处理(如果需要)以后,将本层节点更新为下一层的节点即可:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
TreeNode* reverseOddLevels(TreeNode* root) {
int lay = 0;
vector<TreeNode*> vec;
vec.push_back(root);
while(1){
int size = vec.size();
if(lay % 2 != 0){
for(int i = 0; i < size - i; ++ i){
int temp = vec[i] -> val;
vec[i] -> val = vec[size - 1 - i] -> val;
vec[size - 1 - i] -> val = temp;
}
}
if(vec.front() -> left == nullptr){
break;
}
vector<TreeNode*> t_vec;
for(int i = 0; i < size; ++ i){
t_vec.push_back(vec[i] -> left);
t_vec.push_back(vec[i] -> right);
}
vec = t_vec;
lay ++;
}
return root;
}
};