lintcode: 二叉树的锯齿形层次遍历
题目
二叉树的锯齿形层次遍历
给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行)
给出一棵二叉树 {3,9,20,#,#,15,7},
3
/ \
9 20
/ \
15 7
返回其锯齿形的层次遍历为:
[
[3],
[20,9],
[15,7]
] 解题
交叉着走,受上面两题的影响,考虑用队列,发现不可以,换成栈,发现只用一个栈的话也不可以,(一个栈也能对71%的测试数据)在入栈 和出栈的时候,出现了混乱,考虑用两个栈。
下面是自己写的程序,代码写的好燋灼
关键点:两个栈交叉着进,交叉的出
/**
* Definition of TreeNode:
* public class TreeNode {
* public int val;
* public TreeNode left, right;
* public TreeNode(int val) {
* this.val = val;
* this.left = this.right = null;
* }
* }
*/ public 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 ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) {
// write your code here
ArrayList<ArrayList<Integer>> tree = new ArrayList<ArrayList<Integer>>();
if(root == null)
return tree;
// rightstack 出栈序列是 左到右该层元素
Stack<TreeNode> leftstack = new Stack<TreeNode>();
leftstack.push(root); // leftstack 出栈序列是 右到左该层元素
Stack<TreeNode> rightstack = new Stack<TreeNode>();
boolean left = true;
while(!leftstack.empty() || !rightstack.empty()){
ArrayList<Integer> list = new ArrayList<Integer>();
if(left){
int size = leftstack.size();
for(int i=0;i<size;i++){
TreeNode node = leftstack.pop();
list.add(node.val);
if(node.left!=null)
rightstack.push(node.left);
if(node.right!=null)
rightstack.push(node.right); }
}else{
int size = rightstack.size();
for(int i=0;i<size;i++){
TreeNode node = rightstack.pop();
list.add(node.val);
if(node.right!=null)
leftstack.push(node.right);
if(node.left!=null)
leftstack.push(node.left); }
}
left=!left;
tree.add(list);
}
return tree;
}
}
Java Code
九章程序好像简洁了一些
lintcode: 二叉树的锯齿形层次遍历的更多相关文章
- lintcode二叉树的锯齿形层次遍历 (双端队列)
题目链接: http://www.lintcode.com/zh-cn/problem/binary-tree-zigzag-level-order-traversal/ 二叉树的锯齿形层次遍历 给出 ...
- LintCode-71.二叉树的锯齿形层次遍历
二叉树的锯齿形层次遍历 给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 返回其锯齿形的层次 ...
- LeetCode:二叉树的锯齿形层次遍历【103】
LeetCode:二叉树的锯齿形层次遍历[103] 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如:给定二叉树 ...
- LeetCode 103. 二叉树的锯齿形层次遍历(Binary Tree Zigzag Level Order Traversal)
103. 二叉树的锯齿形层次遍历 103. Binary Tree Zigzag Level Order Traversal 题目描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再 ...
- LeetCode103. 二叉树的锯齿形层次遍历
103. 二叉树的锯齿形层次遍历 描述 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 示例 例如,给定二叉树: [3,9,2 ...
- Java实现 LeetCode 103 二叉树的锯齿形层次遍历
103. 二叉树的锯齿形层次遍历 给定一个二叉树,返回其节点值的锯齿形层次遍历.(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行). 例如: 给定二叉树 [3,9,20,null ...
- 【二叉树-BFS系列1】二叉树的右视图、二叉树的锯齿形层次遍历
题目 199. 二叉树的右视图 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. 示例: 输入: [1,2,3,null,5,null,4] 输出: [1, ...
- leetcode 102. 二叉树的层次遍历 及 103. 二叉树的锯齿形层次遍历
102. 二叉树的层次遍历 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / ...
- [Swift]LeetCode103. 二叉树的锯齿形层次遍历 | Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
随机推荐
- centos下安装图像化界面
前面我们安装的centos系统多为没有图像化界面的命令行界面,为了安装oracle等工具,我们先为我们的centos安装图像化界面 使用命令为 yum groupinstall "Deskt ...
- JQuery插件开发 - 模板
(function($) { $.fn.PluginName = function(options) { // 创建一个默认设置对象 var defaults = { key : "Defa ...
- Dynamic - ExpandoObject学习心得
1. 今天下午在做开发过程中,遇到了一个问题,要往Xml文件中添加新的节点,做个xml开发的都知道该怎么做,这不是什么难事,我卡卡卡卡把这个问题解决了,但是新问题又来了,要对xml中对应的节点数据添 ...
- jquery 在页面中三种写法
jQuery 分 2 个系列版本 1.x 与 2.x,主要的区别在于 2.x 不再兼容 IE6.7.8浏览器,这样做的目的是为了兼容移动端开发.由于减少了一些代码,使得该版本比 jQuery 1.x ...
- RUP(Rational Unified Process)统一软件过程概述
RUP是Rational公司三位杰出的软件工程大师Grady Booch,Ivar Jacobson,James Rumbaugh提出的一个软件工程过程方法.软件开发过程是将一个用户需求转化为软件系统 ...
- Webserver issues | PHP manager for IIS
4 down vote accepted In order to successfully install the PHP manager for IIS 8, you need the .NET 3 ...
- 数据库操作类util
package util; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManager; imp ...
- windows7 64bit下安装Oracle 11g R2
Win7 bit64,安装的是64位的客户端. 1.PLSql连接数据库 (1)下载 instantclient-basic-win32-11.2.0.1.0.zip解压到Oracle要目当下 ...
- hdu 2837 Calculation 指数循环节套路题
Calculation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- dblink 的源数据表结构修改后在存储过程里执行报错
原情况:A服务器表A服务器B也有一张表A服务器B上有一个存储过程要把本地的head表向A服务器表里插入数据.变更后:在A服务器表里增加了一个字段inserttime,服务器B存储过程本地表向A服务器插 ...