二叉树的层序遍历
2015-10-27 17:13
211 查看
二叉树的层序遍历就是按照二叉树的深度分层遍历,也就是广度优先遍历(BFS)。层序遍历使用队列,一种先进先出(FIFO)的数据结构。下面简单介绍下二叉树 的层序遍历。
层序遍历从根节点开始,将根节点压入队列中,每次访问一个节点,就将其左右儿子节点压入队列中,直到队列为空,说明遍历结束。代码如下:
结果:[1,2,3,4,5,9,4,7,0]
更近一步,如果需要将结果存在一个二维数组里(这里的二维数组长度不一),我们需要将每一层的数据保存起来,我们需要在根节点后压入NULL节点表示一层结束,当以后每访问到NULL节点时,说明当前层已经遍历完毕。代码如下:
[
[1],
[2,3],
[4,5,9],
[4,7,0]
]
层序遍历从根节点开始,将根节点压入队列中,每次访问一个节点,就将其左右儿子节点压入队列中,直到队列为空,说明遍历结束。代码如下:
class Solution { public: vector<int> levelOrder(TreeNode* root) { vector<int> ret; if(root==NULL)return ret; queue<TreeNode*> q; q.push(root); while(!q.empty()) { TreeNode *curr=q.front(); q.pop(); ret.push_back(curr->val); if(curr->left)q.push(curr->left); if(curr->right)q.push(curr->right); } return ret; } };例如如下的二叉树,结果如下:
结果:[1,2,3,4,5,9,4,7,0]
更近一步,如果需要将结果存在一个二维数组里(这里的二维数组长度不一),我们需要将每一层的数据保存起来,我们需要在根节点后压入NULL节点表示一层结束,当以后每访问到NULL节点时,说明当前层已经遍历完毕。代码如下:
class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; vector<int> level_data; if(root==NULL) return res; queue<TreeNode*> q; q.push(root); q.push(NULL); while(!q.empty()) { TreeNode* temp=q.front(); q.pop(); if(temp) { level_data.push_back(temp->val); if(temp->left) q.push(temp->left); if(temp->right) q.push(temp->right); } else { if(!level_data.empty()) { q.push(NULL); res.push_back(level_data); level_data.clear(); } } } return res; } };对于上面的二叉树,结果如下:
[
[1],
[2,3],
[4,5,9],
[4,7,0]
]
相关文章推荐
- Git常用命令
- 阅读了一篇转型产品经理的心得。
- Ehcache(09)——缓存Web页面
- 搭建服务器过程中遇到的问题总结
- [RuntimeInitializeOnLoadMethod] 非场景非脚本初始化脚本(转自雨松mo'mo)
- SQLServer 里面的 DDL,DML,DCL,TCL
- OC与Swift混编
- 基于nginx的hls直播系统
- IE11 —— F12 开发者工具
- 获取键盘高度,调整输入框位置
- java继承2-构造函数详细
- LeetCode——Single Number III
- 【译】用 Chart.js 做漂亮的响应式表单
- 信息安全系统设计基础第六周学习总结
- Mac 实用工具与问题解决
- SQL Server 收缩数据库
- Ehcache(08)——可阻塞的Cache——BlockingCache
- 根据大脑频率调整状态
- 自身电脑搭建服务器
- 计算几何基础——矢量和叉积 && 叉积、线段相交判断、凸包(转载)