IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 4. 二叉树的层序遍历 (levelOrder) -> 正文阅读

[数据结构与算法]4. 二叉树的层序遍历 (levelOrder)

头文件: 用到的是前序遍历中的头文件,具体可参见 "二叉树的前序遍历"

一,层序遍历的概念

????????层序遍历
????????????????实质是 广度优先搜索,按照层的顺序访问每个节点
????????????????可以利用队列的性质,逐层访问

二,层序遍历

vector<vector<int>> levelOrder(TreeNode* root) {
	vector<vector<int>> ret;
	if (root) {
		queue<TreeNode*> queue;
		queue.emplace(root);

		while (!queue.empty()) {		// 队列不空
			int size = queue.size();	// 获取队列中的元素个数,表示当前这层的元素个数
			vector<int> vec;

			for (int i = 0; i < size; i++) {// 将当前这层所有的元素都弹出来,将弹出元素的子节点加入到队列中
				TreeNode* top = (TreeNode*)queue.front();	// 获取当前的元素
				queue.pop();
				vec.emplace_back(top->val);			// 弹出过程中,记录这层所包含的元素

				if (top->left) {		// 若该元素有左儿子,则将其加入队列
					queue.emplace(top->left);
				}
				if (top->right) {		// 若该元素有右儿子,则将其加入队列
					queue.emplace(top->right);
				}
			}
			if (!vec.empty()) {			// 记录这层元素的 vector 不为空,则将其加入结果
				ret.emplace_back(vec);
			}
		}
	}
	return ret;
}

三,主函数

#if LEVEL_ORDER_TRAVERSAL

int main() {

	//TreeNode* root = getRandomTree();

	TreeNode* root = new TreeNode(1);
	root->left = new TreeNode(2);
	root->right = new TreeNode(3);

	root->left->left = new TreeNode(4);
	root->left->right = new TreeNode(5);

	root->right->left = new TreeNode(6);
	root->right->right = new TreeNode(7);

	vector<vector<int>> ret = levelOrder(root);

	cout << "层序遍历 : " << endl;
	for (int i = 0; i < ret.size(); i++) {
		PRINT(ret[i]);
	}

	return 0;
}

#endif

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 08:04:35  更:2021-07-28 08:04:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 14:35:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码