c++二叉树层序遍历,c语言二叉树中序遍历

  c++二叉树层序遍历,c语言二叉树中序遍历

  第102条序列遍历(困难?) 0.错误观念1。数组队列初始化2。正在初始化数组3。队列操作思想

  这个二叉树的题目毕竟比较难,所以我单独拿出来发了一个解答。

  102序列遍历(难?)

  Leetcode: 102。二叉树的序列遍历

  这个问题相对容易,你可能和我一样不明白问题要求中最后两个参数是干什么用的。

  /**

  *返回大小为*returnSize的数组的数组。

  *数组的大小以* returnColumnSizes数组的形式返回。

  *注意:返回的数组和*columnSizes数组都必须被malloced,假设调用者调用free()。

  */

  int * * level order(struct TreeNode * root,int* returnSize,int** returnColumnSizes){

  }看了一些问题解答,这是理解这个问题的要求。

  *returnSize:存储二叉树的层数* * * returnColumnSizes:存储二叉树每层的节点数。返回值必须是int**:需要返回一个指针数组。数组中的每个元素都是一个数组A,数组A存储二叉树每层的节点值。

  0.错误的想法。一开始我的想法是用一个单独的函数计算树中节点的个数和级别,然后再次进行序列遍历,得到树的值。

  但显然,这个思路在这个题目里是行不通的!

  1.数组队列初始化在链式二叉树博客中,我谈到了用队列实现序列遍历的思想。这就是我们在OJ问题上所做的。不同的是,在我自己写的队列实现中,我用的是链式队列。而且最好用数组队列!

  #定义最大2000

  int * * level order(struct TreeNode * root,int* returnSize,int** returnColumnSizes) {

  if (root==NULL)

  返回;

  struct TreeNode * Queue[MAX];//队列来存储节点的地址。

  int front=0,tail=0;//指向队列头和队列尾。2.初始化数组。毕竟这一章会在身边,所以一步一步理解。

  * returnSize=0;//将二叉树层次结构初始化为0

  //存储二叉树各层节点的值

  int * * ret=(int * *)malloc(sizeof(int *)* MAX);

  //打开一个数组来存储每层的节点数

  * return columnsizes=(int *)malloc(sizeof(int *)*(MAX/2));Ret是一个指针数组,里面存放的是数组A,里面是每一层的节点值。Ret是title *returnColumnSizes打开数组保存每层节点数所需的返回值。其实这里不需要二级指针返回ColumnSizes,但是由于标题是以int**给出的,我们需要先*解引用它,然后malloc打开一个数组。

  3.队列操作思路:先将根节点放入队列,tail外循环判断队列是否不为空,如果不为空,停止内循环,对每一层进行入队,从而得到每一层的节点值和编号。在内循环中创建ret数组的子数组,分别存储每层的节点值,最后将每层的节点数赋给* returncolumnsize数组,* returnSize struct TreeNode * head;

  queue[tail]=root;//根节点入队

  而(前面!=尾巴)

  {

  int Csize=0;//每层中的节点数

  int end=tail

  //end是每层最后一个节点的指针。Tail将在后续的入队操作中发生变化,因此需要保存tail的值。

  ret[* returnSize]=(int *)malloc(sizeof(int *)*(end-front));

  //为每个层打开一个单独的数组来存储值

  while(前端)

  {

  head=Queue[front];

  ret[* returnSize][Csize]=head-val;

  //数组赋值,而每层的节点数Csize

  如果(头-左!=空)

  Queue[tail ]=头向左;

  如果(头-对!=空)

  队列[尾]=头向右;

  }

  (* return columnsizes)[* returnSize]=Csize;//分配每层的节点数

  (* returnSize);//第1层

  }

  返回ret外循环结束后,ret数组就是此时题目要求的结果。只需返回ret!

  这里有个小问题。当树为空时,层次结构应为0。所以我们需要在第一行赋值* returnSize=0;否则,执行会出错。

  看了解答才明白这个问题的思路,所以以上只是思路的重复?还是太好吃了!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: