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 ...
随机推荐
- Jquery Table 操作
获取行号 var rowIndex = $("#TableId").find("tr").index($("#RowId")[0]); va ...
- 利用烧鹅制作简单BadUSB,插谁谁怀孕
所用硬件设备为烧鹅,烧鹅是RadioWar基于Teensy++ 2.0 AT90USB1286芯片设计的USB Rubber Ducky类开发板. 使用veil编码meterpreter生成paylo ...
- 动态规划 算法(DP)
多阶段决策过程(multistep decision process)是指这样一类特殊的活动过程,过程可以按时间顺序分解成若干个相互联系的阶段,在每一个阶段都需要做出决策,全部过程的决策是一个决策序列 ...
- 前App Store高管揭秘:关于“苹果推荐”的七大真相
相信你已经看过很多这样那样关于如何获得苹果商店推荐的攻略了,但其实很多人依然陷入了很大的误区.前不久采访了前App Store团队高管Greg Essig,向各位开发者揭示关于获得苹果推荐的真相. 在 ...
- 一、什么是WPF?
一.什么是WPF? Windows Presentation Foundation(以前的代号为“Avalon”)是 Microsoft 用于 Windows 的统一显示子系统,它通过 WinFX 公 ...
- WCF之多个终结点
1.服务端配置如下(一个Service节点下可有多个endpoint,): <system.serviceModel> <services> <service name= ...
- magento日常使用
magento order number长度(修改)设置 2013年3月15日星期五 Asia/Shanghai上午10时22分02秒 1-进入要修改的该网站的数据库:2-找到表名:eav_entit ...
- magento十大免费插件
10. 自定义分层导航风格URL:http://www.magentocommerce.com/magento-connect/custom-layered-navigation-style.html ...
- LeetCode Pow(x, n) (水题)
题意: 求浮点型x的n次幂结果. 思路: logN直接求,注意n可能为负数!!!当n=-2147483648的时候,千万别直接n=-n,这样的结果是多少?其他求法大同小异. class Solutio ...
- Core Java Volume I — 3.6. Strings
3.6. StringsConceptually, Java strings are sequences of Unicode characters(Java的字符串是一个Unicode序列). Fo ...