二叉树的层次遍历

标签: 队列  二叉树  数据结构

102.二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
在这里插入图片描述
来源:力扣(LeetCode)
链接:link
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

分析:本题使用宽度优先搜索(BFS),对每一层的元素同时进入队列,然后出队时同时出队,再换下一层的同时入队。

C++源码:

/** 
* Definition for a binary tree node. 
* * struct TreeNode { 
* *     int val; 
* *     TreeNode *left; 
* *     TreeNode *right; 
* *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} 
* * }; 
*/
class Solution {
public:    
	vector<vector<int>> levelOrder(TreeNode* root) 
	{        
		vector<vector<int>> ans;        
		if(root == NULL)            
			return ans;        
		queue<TreeNode*> q;        
		TreeNode* p = root;        
		q.push(root);        
		while(!q.empty())        
		{            
			vector<int> step;            
			int width = q.size();            
			for(int i = 0;i < width;i++)//这一层循环用来将之前层的元素出队,将下一层元素入队            
			{                
				p = q.front();                
				step.push_back(p->val);                
				q.pop();                
				if(p->left) q.push(p->left);                
				if(p->right) q.push(p->right);            
			}            
			ans.push_back(step);        
		}        
		return ans;    
	}
};
版权声明:本文为qq_43655213原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43655213/article/details/104588451

智能推荐

二叉树的层次遍历

 二叉树的层次遍历 题目描述 : 给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。 例如: 给定二叉树: [3,9,20,null,null,15,7],     3    / \   9  20       /  \   &n...

102.二叉树的层次遍历

难度:中等 题目描述: 思路总结:看到这题,不知是受到什么毒害,首先想到了队列和栈,但发现得用两个分别存当前和子节点,遂放弃,看官方题解,还是两种方法,递归和迭代。 题解一:(递归) 题解一结果: 题解二:(迭代) 题解二结果:...

107.二叉树的层次遍历Ⅱ

难度:简单 题目描述: **思路总结:**首先很直观的想到了,层次遍历,将结果逆序返回。 题解一:(递归) 题解一结果: 题解二:(迭代) 题解二结果: 后记:其实这两题的这两种做法,相对于层次遍历来说也就是,一个逆序操作,只是将逆序操作放到递归和遍历中了,使用的是Python中list的insert方法。...

二叉树的层次遍历

题目 思路 二叉树的层次遍历有两种方法,分别是迭代法和递归法 迭代法 迭代法主要用到队列,将下一层的元素放到队列尾部,从队列首部弹出元素,代码如下 递归法 先用递归求出二叉树的高度 然后再递归的写进容器...

猜你喜欢

人工智能基础-数学方法-形式逻辑

1956 年召开的达特茅斯会议宣告了人工智能的诞生。在人工智能的襁褓期,各位奠基者们,包括约翰·麦卡锡、赫伯特·西蒙、马文·明斯基等未来的图灵奖得主,他们的愿景是让“具备抽象思考能力的程序解释合成的物质如何能够拥有人类的心智”。 通俗地说,理想的人工智能应该具备抽象意义上的学习、推理与归纳能力,其通用性将远远强于解决国际象棋或是围棋...

P3397 地毯——题解2020.10.3

P3397 地毯 思路分析 定义一个二维数组 a[ ][ ]存放每个点覆盖地毯的个数,下标表示每个点的坐标; 设置一个二重循环依次遍历每个地毯覆盖的坐标范围,使地毯覆盖范围内点的值+1; 打印出该二维数组 a[ ][ ]即为本题答案; 注意事项 由题可知:对于20%的数据,有 n≤50,m≤100;对于100%的数据,有 n,m≤1000;所以数组定义为a[1003][1003]...

反射注解案例

1、反射案例: 需求 写一个"框架",不能改变该类的任何代码的前提下,可以帮我们创建任意类的对象,并且执行其中任意方法 实现: 配置文件 反射 步骤: 创建对象 将需要创建的对象的全类名和需要执行的方法定义在配置文件中 在程序中加载读取配置文件 使用反射技术来加载类文件进内存 执行方法 第一步:Person类(创建对象) 第二步:配置文件 pro.properties(将需要创...

lambert与half lambert模型逐顶点和逐片元的漫反射光照

兰伯特模型 逐顶点光照 逐片元光照: 效果对比:左边为逐片元光照。右边为逐顶点光照。右边明暗交界处有较明显的锯齿 半兰伯特光照模型 兰伯特模型的一个问题就是背光面只有一种颜色,缺乏立体感。Half Lambert用于解决这个问题 半兰伯特模型公式: 与兰伯特模型的差别主要在于不同于将背光面光都设为0,它将背光的光也即负值也映射到[0,1]区间。避免了背光的颜色只有0这一种值。需要注意的是,half...

[React官网入门教程]三子棋游戏完整代码

入门教程: 认识 React 最终效果 完整代码 index.css部分 index.css部分...