剑指offer32-III从上到下打印二叉树
Posted sbb-first-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer32-III从上到下打印二叉树相关的知识,希望对你有一定的参考价值。
此题和之前的剑指offer32-I、II.从上到下打印二叉树大致相同在BFS的基础上只是添加了一个重排序的过程。具体代码如下:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * struct TreeNode *left; 6 * struct TreeNode *right; 7 * }; 8 */ 9 10 11 /** 12 * Return an array of arrays of size *returnSize. 13 * The sizes of the arrays are returned as *returnColumnSizes array. 14 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free(). 15 */ 16 typedef struct queue 17 { 18 int front; 19 int rear; 20 struct TreeNode *data[1009]; 21 }QUEUE; 22 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){ 23 *returnSize=0; 24 if(root==NULL) 25 { 26 return NULL; 27 } 28 QUEUE *q=(QUEUE *)malloc(sizeof(QUEUE)*1009); 29 q->front=0; 30 q->rear=1; 31 q->data[0]=root; 32 int **res=(int **)malloc(sizeof(int *)*1009); //定义一个二维数组 33 //bfs 34 while(q->front!=q->rear) 35 { 36 int levelcount=q->rear-q->front; //二叉树每层的个数也就是数组中每行有多少个数。 37 res[*returnSize]=(int *)calloc(levelcount,sizeof(int)); //给数组中每一行分配levelcount个地址。 38 (*returnColumnSizes)[*returnSize]=levelcount; 39 for(int i=0;i<levelcount;i++) 40 { 41 if(q->data[(q->front)]->left) 42 { 43 q->data[(q->rear)++]=q->data[q->front]->left; 44 } 45 if(q->data[(q->front)]->right) 46 { 47 q->data[q->rear++]=q->data[q->front]->right; 48 } 49 if(*returnSize%2!=0) //对奇数行号进行重排列 50 { 51 res[*returnSize][levelcount-i-1]=q->data[q->front]->val; 52 } 53 else 54 { 55 res[*returnSize][i]=q->data[q->front]->val; 56 } 57 q->front++; 58 } 59 (*returnSize)++; //记录层数,即二维数组的行数。 60 } 61 return res; 62 }
以上是关于剑指offer32-III从上到下打印二叉树的主要内容,如果未能解决你的问题,请参考以下文章
剑指offer面试题32 - III. 从上到下打印二叉树 III
LeetCode(剑指 Offer)- 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III(medium) javascript解法
乱序版 ● 剑指offer每日算法题打卡题解—— 从上到下打印二叉树(题号32)