二叉树的层序遍历(代码片段)

smallleiit smallleiit     2022-12-10     354

关键词:

题目描述:

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。(即逐层地,从左到右访问所有节点)。

示例:二叉树:[3,9,20,null,null,15,7],

    3
/
9 20
/
15 7

返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

  

解题思路:

首先我们要知道层序遍历考查的其实就是广度优先遍历(BFS),聪明的朋友肯定还知道他的孪生兄弟深度优先遍历(DFS),篇幅较长这里就不过多介绍,感兴趣的朋友请自行了解。

要想完成广度优先遍历,我们要借助队列(先进先出,后进后出)的概念。

思想 :当队列中的队首出队的时候,要从二叉搜索树中找到它的两个孩子入队。队列出队为空的时候,就将二叉树遍历完成了。

我们再归纳一下广度优先遍历的步骤:

1、将根节点入队(入队的时候不做别的操作);

2、队列非空,所以接下来就要出队,规则是:依次出队,只要出队的元素有孩子,左右孩子依次入队,如果没有孩子不做任何操作。

另外,由于此题的返回数据格式是封装每层,所以这里可以定义一个count计录每层的数量

用简便图解如下:

技术图片

 

//go 
//* Definition for a binary tree node.
type TreeNode struct 
 Val int
 Left *TreeNode
 Right *TreeNode


func levelOrder(root *TreeNode) [][]int 
 var res [][]int
 if root == nil 
  return res
 
 queue := make([]*TreeNode,0)
 queue = append(queue, root) // 添加到队尾,等于add()
 for len(queue) != 0 
  count := len(queue)
  var list []int
  for count > 0 
   node := queue[0] //取出队首,等于poll()
   queue = queue[1:] //移出队首更新队列
   list = append(list, node.Val)
   if node.Left != nil 
    queue = append(queue, node.Left)
   
   if node.Right != nil 
    queue = append(queue, node.Right)
   
   count--
  
  res = append(res, list)
 
 return res

  地址:https://mp.weixin.qq.com/s/Gb9bg04PMR4mwM2ZET8HnA

 

二叉树的层序遍历(代码片段)

107.二叉树的层序遍历II给定一个二叉树,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树[3,9,20,null,null,15,7],​3​ /\\920​/\\157返回其自底... 查看详情

nc15二叉树的层序遍历(代码片段)

题目描述二叉树的层序遍历解题思路运用二叉树的层序遍历和二叉树的深度计算的思想;代码展示/***structTreeNode* intval;* structTreeNode*left;* structTreeNode*right;*;*/classSolutionpublic:/****@paramrootTreeNode类*@returnint整型vector 查看详情

java二叉树的层序遍历(代码片段)

查看详情

102.二叉树的层序遍历(代码片段)

二叉树的层序遍历给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7]3/920/157返回其层序遍历结果:[[3],[9,20],[15,7]]/***Defini... 查看详情

102.二叉树的层序遍历(代码片段)

/***Definitionforabinarytreenode.*structTreeNode*intval;*structTreeNode*left;*structTreeNode*right;*;*//***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesa 查看详情

二叉树的层序遍历(代码片段)

题目描述:给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],3/920/157返回其层次遍历结果:[[3],[9,20],[15,7]]  解题思路:首先我们要知道层序遍... 查看详情

刷题-力扣-102.二叉树的层序遍历(代码片段)

102.二叉树的层序遍历题目链接来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目描述给你一个二叉树,请你返回其... 查看详情

c++--二叉树的层序遍历(代码片段)

二叉树的层序遍历题目要求:题目来源:力扣classSolutionpublic:vector<vector<int>>levelOrder(TreeNode*root)if(root==nullptr)returnvector<vector<int>>();queue<TreeNode*> 查看详情

2021-4-9天梯赛补题(完全二叉树的层序遍历)(代码片段)

完全二叉树的层序遍历题目链接:link.原题描述一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为D的,有N个结点的二叉树,若其结点对应于相同深度完美二叉树的层序... 查看详情

二叉树的层序遍历--结合递归算法(代码片段)

...;intrear=0;intLevelOrderTraverse(BiTreeT)if(!isTreeExits)cout<<"二叉树不存在"; 查看详情

102#二叉树的层序遍历(代码片段)

题目描述给定一个二叉树,返回其按层次遍历的节点值。(即逐层地,从左到右访问所有节点)。例如:给定二叉树:[3,9,20,null,null,15,7],3/920/157返回其层次遍历结果:[[3],[9,20],[15,7]]分析思路常规思维法我们理一遍题意:给定一棵二... 查看详情

107.二叉树的层序遍历ii(代码片段)

力扣打卡:107.二叉树的层序遍历II解题思路正常的层序遍历,最后进行交换即可层序遍历借助的数据结构是:队列首先将root节点加入队列,然后记录此时的长度,因为队列的先进先出,所以需要有一个len记录每一层的数量同一层的遍历... 查看详情

leetcode107.二叉树的层序遍历ii(代码片段)

给定一个二叉树,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树[3,9,20,null,null,15,7],3/\\920/\\157返回其自底向上的层序遍历为:[[15,7],... 查看详情

leetcode107.二叉树的层序遍历ii(代码片段)

给定一个二叉树,返回其节点值自底向上的层序遍历。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树[3,9,20,null,null,15,7],3/\\920/\\157返回其自底向上的层序遍历为:[[15,7],... 查看详情

429.n叉树的层序遍历(代码片段)

...扣打卡:429.N叉树的层序遍历解题思路这道题目就是二叉树的变形,二叉树的左右子节点变为了一群子结点写出二叉树的框架原来判断添加左右子节点的位置,改成判断添加一群子节点代码/*//DefinitionforaNode.classNodepubli... 查看详情

leetcode——二叉树的层序遍历(代码片段)

1.二叉树的层序遍历给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。2.题解解法一:BFS解决:广度优先搜索这题和剑指Offer32——从上到下打印二叉树其实是... 查看详情

leetcodeno.102二叉树的层序遍历(代码片段)

题目描述给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7],  3  /\\ 9 20   / \\  15 7返回其层序遍历结果:[ [3], [... 查看详情

二叉树的层序遍历原理+leetcode真题练习(代码片段)

二叉树的层序遍历层序遍历是继前序、中序、后序遍历之后的第二类遍历方式。一、层序遍历假设二叉树根节点(root)所在层数为1,层序遍历就是从根节点出发,首先访问根节点,接着从左到右的访问第二层上的节点&#... 查看详情