leetcode刷题日记——二叉树的锯齿形层序遍历
[ 题目描述 ]:
[ 思路 ]:
- BFS,通过层次遍历,先将各层的数据存储下来,然后对偶数层的数据进行翻转,即可得到锯齿形层次遍历
- 运行如下
int** zigzagLevelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes) {if(!root){*returnSize=0;return NULL;}struct TreeNode* queue[2000];int** res=(int**)malloc(sizeof(int*)*2000);*returnColumnSizes = (int*)malloc(2000*sizeof(int));int front=0,rear=0;*returnSize=0;queue[rear++]=root;while(front<rear){res[*returnSize]=(int*)malloc(sizeof(int)*1024);int count=rear-front;for(int i=0;i<count;i++){res[*returnSize][i]=queue[front]->val;if(queue[front]->left) queue[rear++]=queue[front]->left;if(queue[front]->right) queue[rear++]=queue[front]->right;front++;}(*returnColumnSizes)[*returnSize]=count;(*returnSize)++;}for(int i=0;i<*returnSize;i++){if(i%2!=0){for(int j=0;j<(*returnColumnSizes)[i]/2;j++){int temp=res[i][j];res[i][j]=res[i][(*returnColumnSizes)[i]-j-1];res[i][(*returnColumnSizes)[i]-j-1]=temp;}}}return res;
}
[ 官方题解 ]:
- BFS + 双端队列,通过双端队列,来模拟锯齿形遍历