二叉树专题-lintcode二叉树的层序遍历
来源:互联网 发布:网络通信软件有哪些 编辑:程序博客网 时间:2024/06/05 19:41
层序遍历算是遍历方式中,比较容易掌握的,实质就是宽度优先遍历,BFS的基本代码块如下;
void BFS(){ 创建队列 第一个元素入队 while(队列非空){ 取队首元素top 出队 访问top 下一层的元素按顺序入队 }}
放到二叉树的遍历中来看,首先根节点入队,根出队,访问根节点,再入队左孩子,入队右孩子;这样再出队时,就是访问的第二层的左侧......以此类推
我们来看看题目考察的方式
由以上的分析,容易想到先取到这一层的元素的个数,然后在里面加一层循环即可
vector<vector<int>> levelOrder(TreeNode *root) { // write your code here queue<TreeNode *> q; vector<vector<int>> result; if(root==NULL) return result; if(root){//不为空则入队 q.push(root); while(!q.empty()){ vector<int> oneLevel; int size = q.size(); for(int i=0;i<size;++i){ TreeNode *node=q.front(); q.pop(); oneLevel.push_back(node->val); if(node->left) q.push(node->left); if(node->right)q.push(node->right); } result.push_back(oneLevel); } } return result; }
再来看看其他的要求:
第一道要求,返回从下往上遍历的结果;我们只需要按照最初的从上向下的遍历,得到[ [3],[9,20],[15,7] ]后reverse一下即可
第二道题要求锯齿形的遍历,先从左往右,后从右往左,故只需要设置一个标志位,当从右往左时,我们对这一层的结果reverse即可
给出锯齿形遍历的代码:
vector<vector<int>> zigzagLevelOrder(TreeNode * root) { // write your code here vector<vector<int>> result; if(!root) return result; queue<TreeNode*> q; q.push(root); bool leftToRight=true; while(!q.empty()){ vector<int> oneLevel; int size=q.size(); for(int i=0;i<size;++i){ TreeNode* node=q.front(); q.pop(); oneLevel.push_back(node->val); if(node->left) q.push(node->left); if(node->right) q.push(node->right); } if(!leftToRight) reverse(oneLevel.begin(),oneLevel.end()); result.push_back(oneLevel); leftToRight=!leftToRight; } return result; }
阅读全文
0 0
- 二叉树专题-lintcode二叉树的层序遍历
- [lintcode]二叉树的层序遍历
- lintcode(M)二叉树的层序遍历II
- LintCode -- 二叉树的前序遍历
- LintCode -- 二叉树的中序遍历
- LintCode -- 二叉树的后序遍历
- Lintcode 二叉树的后序遍历
- lintcode 二叉树的中序遍历
- lintcode 二叉树的前序遍历
- LintCode:二叉树的后序遍历
- lintcode:二叉树的中序遍历
- lintcode,二叉树的后序遍历
- lintcode,二叉树的前序遍历
- lintcode,二叉树的中序遍历
- LintCode-二叉树的前序遍历
- LintCode-二叉树的中序遍历
- LintCode-二叉树的后序遍历
- lintcode 二叉树的前序遍历
- jpa 排序 pageable
- ubuntu 查找大于多大的文件的命令
- 《android日常bug系列》AndroidStudio 编译报错Error:null value in entry: outputDirectory=null解决办法
- 前端传json对象(包含json数组在里面)的时候,后台为Java,用SSM时候如何接收
- JS为循环动态生成的节点添加点击事件
- 二叉树专题-lintcode二叉树的层序遍历
- nowcoder Wannafly挑战赛1 A 题 【树形dp or 点分治】
- DAY7
- 深浅拷贝 & 类型萃取
- Puppeteer--UI自动化测试And高级爬虫
- Android开发搭建
- Rom开发之OTA升级流程
- 笨方法学习Python-习题13: 参数、解包、变量
- Java——字节流简单介绍