• 二叉树的层序遍历-102


     

    方法一:本文采用BFS进行层序遍历,具体分析参见https://www.cnblogs.com/sbb-first-blog/p/13259728.html

     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 #define MAX_RETURN_NUM 1000
    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 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    17     int **ret=(int**)calloc(MAX_RETURN_NUM,sizeof(int *));    //分配一个二维数组
    18     *returnColumnSizes=(int*)calloc(MAX_RETURN_NUM,sizeof(int));  //分配空间
    19     *returnSize=0;
    20     struct TreeNode *queue[10000];
    21     int outIndex=0;
    22     int inIndex=0;
    23 
    24     //判断异常输入,进入while循环之前初始化
    25     if(root==NULL) return NULL;
    26     queue[inIndex++]=root;
    27     int levelcount=inIndex-outIndex;              //记录每层的个数
    28     int count=0,i;
    29 
    30     //bfs
    31     while(levelcount>0)
    32     {
    33         count++;
    34         ret[*returnSize]=(int *)calloc(levelcount,sizeof(int));
    35         (*returnColumnSizes)[*returnSize]=levelcount;
    36         //对每一层进行处理
    37         for(i=0;i<levelcount;i++)
    38         {
    39             if(queue[outIndex]->left!=NULL)
    40             {
    41                 queue[inIndex++]=queue[outIndex]->left;
    42             }
    43             if(queue[outIndex]->right!=NULL)
    44             {
    45                 queue[inIndex++]=queue[outIndex]->right;
    46             }
    47             ret[*returnSize][i]=queue[outIndex]->val;
    48             outIndex++;
    49         }
    50         //进入下一层的操作
    51         (*returnSize)++;              //在returnSize所指向的数据上加1,
    52         levelcount=inIndex-outIndex;
    53     }
    54 return ret;
    55 
    56 }

     方法二:链表加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      int front;
    18      int rear;
    19      struct TreeNode *data[1009];
    20  }QUEUE;
    21 int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    22     *returnSize=0;
    23     if(root==NULL)
    24     {
    25         return NULL;
    26     }
    27     QUEUE q;
    28     q.front=0;
    29     q.rear=1;
    30     q.data[0]=root;
    31     int levelcount=q.rear-q.front;
    32     int **res=(int **)malloc(sizeof(int *)*1009);     //给二维数组分配空间
    33     int n=-1;
    34     while(q.front!=q.rear)
    35     {
    36         res[*returnSize]=(int *)malloc(1009*sizeof(int));
    37         (*returnColumnSizes)[*returnSize]=levelcount;
    38         for(int i=0;i<levelcount;i++)
    39         {
    40             if(q.data[(q.front)]->left)
    41             {
    42                 q.data[(q.rear)++]=q.data[q.front]->left;
    43             }
    44             if(q.data[(q.front)]->right)
    45             {
    46                 q.data[(q.rear)++]=q.data[q.front]->right;
    47             }
    48             res[*returnSize][i]=q.data[q.front]->val;
    49             q.front++;
    50         }
    51         levelcount=q.rear-q.front;
    52         (*returnSize)++;
    53     }
    54 //    *returnSize=n;
    55     return res;
    56 }
  • 相关阅读:
    转(get和post)
    由在updatepanel中注册脚本所引发的问题
    AJAX请求时status返回状态明细表 readyState的五种状态
    谈谈Ajax中Get和Post
    跟我一起从零开始学WCF系列课程笔记(1):WCF概述
    跟我一起从零开始学WCF系列课程笔记(2):设计和实现服务协定
    ASP.NET AJAX中UpdatePanel的工作原理
    关于页面中回车键默认触发某个控件按钮事件的问题(DefaultButton)
    显示GIF格式图片遇到的问题
    关于GUID
  • 原文地址:https://www.cnblogs.com/sbb-first-blog/p/13283720.html
Copyright © 2020-2023  润新知