lintcode二叉树的锯齿形层次遍历 (双端队列)

 

题目链接:

  http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/

二叉树的锯齿形层次遍历 

  给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 

样例

  给出一棵二叉树 {3,9,20,#,#,15,7},

      3/ \9  20/  \15   7

  返回其锯齿形的层次遍历为:

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

思路:

  我们用双端队列模拟一下这个过程:开始的时候是正向遍历,3通过push_front()放入队列Q, 形成Q[3]。接着我们规定正向遍历的时候从队列前端去元素,下一层元素放入队列的时候是放入队列的后端;而反向遍历的时候正好相反,唯一不同的就是反向遍历时,下一层的右孩子结点(如果有)先放入队列的前端。

  开始Q[3](从前端取数字), 然后下一层放入后是Q[9,20](从后端去数字),20的下一层放入后是Q[15,7,9], 然后变成Q[15,7](从前端去数字),最后得到遍历的结果。

代码实现:

/*** Definition of TreeNode:* class TreeNode {* public:*     int val;*     TreeNode *left, *right;*     TreeNode(int val) {*         this->val = val;*         this->left = this->right = NULL;*     }* }*/class Solution {/*** @param root: The root of binary tree.* @return: A list of lists of integer include *          the zigzag level order traversal of its nodes' values */
public:vector<vector<int>> zigzagLevelOrder(TreeNode *root) {// write your code herevector<vector<int>> vv;if(root == NULL) return vv;deque<TreeNode *> q;q.push_back(root);bool dir = true;//true表示从左向右存储层次遍历,否则是从右向左int levelCnt = 1;//上一层的节点数目int curLevelCnt = 0;//下一层节点数目vector<int> v;while(!q.empty()){TreeNode *cur;if(dir){cur = q.front();q.pop_front();} else {cur = q.back();q.pop_back();}if(dir){if(cur->left){q.push_back(cur->left);++curLevelCnt;}if(cur->right){q.push_back(cur->right);++curLevelCnt;}} else {if(cur->right){q.push_front(cur->right);++curLevelCnt;}if(cur->left){q.push_front(cur->left);++curLevelCnt;}}v.push_back(cur->val);--levelCnt;if(levelCnt == 0){//这一层完毕
                vv.push_back(v);v.clear();levelCnt = curLevelCnt;curLevelCnt = 0;dir = !dir;}}return vv;}
};

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言试题二十一之定义n×n的二维数组编写函数 function(int a[][n])功能是:使数组左下半三角元素中的值全部置成0。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 定义了nn的…

【前端就业课 第二阶段】CSS 零基础到实战(02)列表

整个前端学习路线 以下路线为 CSDN C认提供&#xff1a; 如果想 快点搞完 并且 就业 可以选择C认证&#xff0c;C认证还可以 内推、招聘会 &#xff0c;所以如果在校生想要稳一点&#xff0c;就可以选择C认证或者超级实习生计划&#xff0c;贼稳&#xff01; 链接在这PC端&…

【专升本计算机】甘肃省2020年专升本计算机测试题

文章目录 第一部分 公共基础部分第二部分 数据库部分(文史财经类)第三部分 C语言部分(理工农医类)第四部分 综合部分第一部分 公共基础部分 一、单项选择(90题,每题1分,共90分) 世界上第一台电子计算机诞生于( )年。 A. 1956 B. 1946 C. 1944 D. 1940目前,第二代计…

Docker Eats Disk?

背景介绍下午 5:30&#xff0c;差不多到点打卡下班&#xff0c;准备好零食饮料&#xff0c;放松一下准备下班&#xff0c;然后...CI 构建失败&#xff0c;经典的一幕&#xff01;&#xff01;&#xff01;无法从镜像仓库拉取镜像&#xff0c;docker 正常运行&#xff0c;为什么…

C#网络编程(订立协议和发送文件) - Part.4

转载自&#xff1a;http://www.tracefact.net/CSharp-Programming/Network-Programming-Part4.aspx 文件传输 前面两篇文章所使用的范例都是传输字符串&#xff0c;有的时候我们可能会想在服务端和客户端之间传递文件。比如&#xff0c;考虑这样一种情况&#xff0c;假如客户端…

Android Studio怎么设置悬浮提示文字框显示函数

[摘要]AndroidStudio函数悬浮提示文字框设置方法一&#xff1a;AndroidStudio在默认情况下是不会和Eclipse那样&#xff0c;鼠标移动到一个类或... Android Studio函数悬浮提示文字框设置方法一&#xff1a; Android Studio在默认情况下是不会和Eclipse那样&#xff0c;鼠标移…

消息队列入门(三)JMS标准及实现

消息中间件 消息中间件即Message-oriented middleware(MOM)&#xff0c;消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流&#xff0c;并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型&#xff0c;消息中间件可以在分布式环境下扩展进程间…

C语言试题二十二之定义了3×3的二维数组,并在主函数中赋值。函数的功能使求出数组周边元素的平均值并作为函数值返回给主函数中的s。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 定义了33的…

【专升本计算机】专升本计算机期末考试复习题(A卷附答案)

文章目录 一、单选题(每空2分,共20分)。二、填空题(每空2分,共30分)。三、程序题(每小题10分,共50分)一、单选题(每空2分,共20分)。 世界上第一台电子计算机诞生于( B )年。 A.1956   B.1946   C.1944   D.1940以下不属于数字计算机特点的是 C__ 。 A.运算…

spring定时任务的配置使用

spring的定时任务配置分为三个步骤&#xff1a; 1、定义任务 2、任务执行策略配置 3、启动任务 1、定义任务 <!--要定时执行的方法--> <bean id"testTaskJob" class"org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean&qu…

【前端就业课 第二阶段】CSS 零基础到实战(02)标签类型、字体与图片

整个前端学习路线 以下路线为 CSDN C认提供&#xff1a; 如果想 快点搞完 并且 就业 可以选择超级实习生计划 如果有技术想稳定点找工作&#xff0c;可以C认证&#xff0c;C认证还可以 内推、招聘会 &#xff0c;所以如果在校生想要稳一点&#xff0c;就可以选择C认证或者超…

【SignalR全套系列】之在.Net6中实SignalR通信

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 请公众号后台留言 源码[如果觉得本公众号对您有帮助&#xff0c;欢迎关注]前文回顾【SignalR全套系列】之在.NetCore中实现WebSocket双工通信【SignalR全套系列】之在.Net Core 中实…

实践1-qq邮箱主页

纯html的网页 采用table分割板块进行布局<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns"http://www.w3.org/1999/xhtml"> <head>…

解决adb调试显示 Connected Device ************** [null]

或者有时候直接提示[UNAUTHORIZED……] 上边的提示 Connected Device 中设备编号 后边加了个[null]&#xff0c;意思是未授权&#xff0c;看下设备是否提示授权&#xff0c;如果没看到提示&#xff0c;可以重新拔掉设备&#xff0c;重新连接接数据线&#xff0c;会弹出一个授权…

C语言试题二十三之编写一个函数void function(int tt[m][n],int pp[n]),tt指向一个m行n列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写一个…

Java 解析XML的几种方法

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。 XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已。 基本的解析方式有两种,一种叫SAX&#xff0c;另一种叫DOM。 SAX是基于事件流的解析,DOM是…

怎么发表博客,还不能显示在自己的博客首页上,这还不如玩单机!

怎么发表博客&#xff0c;还不能显示在自己的博客首页上&#xff0c;这还不如玩单机&#xff01; 怎么发表博客&#xff0c;还不能显示在自己的博客首页上&#xff0c;这还不如玩单机&#xff01; 怎么发表博客&#xff0c;还不能显示在自己的博客首页上&#xff0c;这还不如玩…

【前端就业课 第二阶段】CSS 零基础到实战(03)前端 CSS 动效 transition transform

本系列文章持续更新&#xff0c;点击专栏就可以看其他文章&#xff1a;点击进入专栏 整个前端学习路线 以下路线为 CSDN C认提供&#xff1a; 如果想 快点搞完 并且 就业 可以选择超级实习生计划 如果有技术想稳定点找工作&#xff0c;可以C认证&#xff0c;C认证还可以 内…

【专升本计算机】专升本计算机期末考试复习题(B卷附答案)

文章目录 一、单选题(每空2分,共20分)。二、填空题(每空2分,共30分)。三、程序题(每小题10分,共50分)一、单选题(每空2分,共20分)。 世界上第一台电子计算机诞生于( B )年。 A.1956   B.1946   C.1944   D.1940以下不属于数字计算机特点的是 C__ 。 A.运算…

C#基于.Net-HtmlAgilityPack库的爬虫初体验

讲故事前几天有点空闲时间&#xff0c;在github上看一些.Net的开源库&#xff0c;看到了关于爬虫相关的库&#xff0c;于是加入了一个QQ群&#xff0c;看到里面各位大佬讨论的是爬的越好&#xff0c;进去越快&#xff0c;于是我自己也想做一个爬虫相关的东西&#xff0c;但是爬…