leetcode 103 Binary Tree Zigzag Level Order Traversal ----- java
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
和上一题很类似,只不过输出的时候,需要“之”字形输出。
可以在上一层答案的基础上。对偶数层进行反转。
第一次用了两个队列,实现了,但比较慢。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) { List list = new ArrayList<List<Integer>>();
if( root == null)
return list;
Deque<TreeNode> queue = new LinkedList<TreeNode>();
Deque<TreeNode> queue1 = new LinkedList<TreeNode>();
queue.add(root);
int dir = 0;
while( !queue.isEmpty() ){
List ans = new ArrayList<Integer>();
int size = queue.size();
for( int i = 0;i<size;i++){
TreeNode node = null;
if( dir == 0)
node = queue.poll();
else
node = queue.pollLast();
ans.add(node.val);
if( dir == 0){
if( node.left != null)
queue1.add(node.left);
if( node.right != null)
queue1.add(node.right);
}else{
if( node.right != null)
queue1.addFirst(node.right);
if( node.left != null)
queue1.addFirst(node.left);
}
}
list.add(ans);
queue.addAll(queue1);
queue1.clear();
dir = (dir == 1?0:1);
} return list; }
}
但是优点在于不用递归和回溯
使用递归/回溯,速度和代码都会得到优化。
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
helper(res, root, 1);
for (int i = 0; i < res.size(); i++)
if (i % 2 == 1)
Collections.reverse(res.get(i));
return res;
}
private void helper(List<List<Integer>> res, TreeNode node, int level){
if (node == null) return;
if (res.size() < level) res.add(new ArrayList<Integer>());
res.get(level-1).add(node.val);
helper(res, node.left, level+1);
helper(res, node.right, level+1);
}
leetcode 103 Binary Tree Zigzag Level Order Traversal ----- java的更多相关文章
- [LeetCode] 103. Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树来回遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [LeetCode] 103. Binary Tree Zigzag Level Order Traversal _ Medium tag: BFS
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- Java for LeetCode 103 Binary Tree Zigzag Level Order Traversal
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- leetCode 103.Binary Tree Zigzag Level Order Traversal (二叉树Z字形水平序) 解题思路和方法
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [leetcode] 103 Binary Tree Zigzag Level Order Traversal (Medium)
原题链接 题目要求以"Z"字型遍历二叉树,并存储在二维数组里. 利用BFS,对每一层进行遍历.对于每一层是从左还是从右,用一个整数型判断当前是偶数行还是奇数行就可以了. class ...
- Leetcode#103 Binary Tree Zigzag Level Order Traversal
原题地址 基本数据结构操作,二叉树的层次遍历. 代码: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { vect ...
- [leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树Z字形层序遍历
相对于102题,稍微改变下方法就行 迭代方法: 在102题的基础上,加上一个变量来判断是不是需要反转 反转的话,当前list在for循环结束后用collection的反转方法就可以实现反转 递归方法: ...
- leetCode :103. Binary Tree Zigzag Level Order Traversal (swift) 二叉树Z字形层次遍历
// 103. Binary Tree Zigzag Level Order Traversal // https://leetcode.com/problems/binary-tree-zigzag ...
随机推荐
- 在oracle中使用Trigger
1.初始目标 在对表h1插入一条数据时,同时插入一条重复的数据(只有主键不同) 2.在PL/SQL里New一个Trigger或者手动敲入代码 先说明一下,表h1包括4列ID.C1.C2.C3 crea ...
- java.net.SocketException: Too many open files
1.ps -ef|grep java 2.lsof -p 32636 3.lsof -p 20812|wc –l 这个也可以看一个进程打开的文件数 4.ulimit –a c3p0官方提供了两个参 ...
- [Java]eclipse的使用
1.android sdk help安装 使用SDK Manager.exe下载android sdk的时候把docs也勾选上. 在eclipse的android工程下的android.jar(在an ...
- [C/C++]C++标准中的名词
1.qualified-id.nested-name-specifier: [example: struct A { struct B { void F(); }; }; A is an unqual ...
- navtab方法参数以及事件
参数(options) DOM方式初始化navtab的,推荐使用集合属性data-options定义参数,如果使用data属性定义参数,注意转换成对应的名称. 名称 类型 默认值 描述 id stri ...
- zookeeper启动失败无法查看status-----用户权限
最近一直在调试zookeeper,总是出现莫名其妙的问题 QuorumPeerMain 进程存在,但是无法查看status, JMX enabled by defaultUsing config: / ...
- C# Sandboxer
public static string IsolateCallV1(PageContentHandler pHandler) { string name = Guid.NewGuid().ToStr ...
- JS原生回到顶部效果
// 回到顶部 onload = function () { var oBtnTop = document.getElementById('toTop'); var timer = null; oBt ...
- stm32的串口接收字符串以十六进制数
#include "pbdata.h" uint8_t TxBuffer1[] = "USART Interrupt Example: This isUSART1 ...
- spring mvc + freemarker优雅的实现邮件定时发送
1. spring mvc工程中引入相关freemarker\mail的包 如:pom.xml中加入类似 <dependency> <groupId>javax.mail< ...