Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:同花顺做黄金软件 编辑:程序博客网 时间:2024/05/24 04:49
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,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]
confused what "{1,#,2,3}"
means? > read more on how binary tree is serialized on OJ.
我的方法是用了一个queue,一个stack ,用stack 对需要reverse 的level 进行处理
别人的方法是用了 两个queue
/** * Definition for binary tree * 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<Integer>> res = new ArrayList<List<Integer>>(); if (root == null) { return res; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); int level = 0; int levelSize; queue.offer(root); Stack<TreeNode> st = new Stack<TreeNode>(); while (!queue.isEmpty()) { ArrayList<Integer> list = new ArrayList<Integer>(); levelSize = queue.size(); for (int i = 0; i < levelSize; i++) { TreeNode cur = queue.poll(); if(cur.left != null) { queue.offer(cur.left); } if(cur.right != null) { queue.offer(cur.right); } if (level % 2 == 0) { list.add(cur.val); } else {//如果是要reverse 的level ,则用一个stack 处理一下 st.push(cur); } } while (!st.empty()) { list.add(st.pop().val); } res.add(new ArrayList<Integer>(list)); level++; } return res; }}
别人的
/** * Copyright: NineChapter * - Algorithm Course, Mock Interview, Interview Questions * - More details on: http://www.ninechapter.com/ */public class Solution { public ArrayList<ArrayList<Integer>> levelOrderBottom(TreeNode root) { ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); if (root == null) { return result; } Queue<TreeNode> queue = new LinkedList<TreeNode>(); queue.offer(root); int currLevelNodeNum = 1; int nextLevelNodeNum = 0; while (currLevelNodeNum != 0) { ArrayList<Integer> currLevelResult = new ArrayList<Integer>(); nextLevelNodeNum = 0; while (currLevelNodeNum != 0) { TreeNode node = queue.poll(); currLevelNodeNum--; currLevelResult.add(node.val); if (node.left != null) { queue.offer(node.left); nextLevelNodeNum++; } if (node.right != null) { queue.offer(node.right); nextLevelNodeNum++; } } result.add(0, currLevelResult); currLevelNodeNum = nextLevelNodeNum; } return result; }}
0 0
- LeetCode: Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- [Leetcode] Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- 【leetcode】Binary Tree Zigzag Level Order Traversal
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- [Leetcode]Binary Tree Zigzag Level Order Traversal
- [leetcode]Binary Tree Zigzag Level Order Traversal
- Leetcode: Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal
- 白话经典算法系列之三 希尔排序的实现
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- [LeetCode]Permutation Sequence
- 白话经典算法系列之五 归并排序的实现
- 白话经典算法系列之六 快速排序 快速搞定
- Binary Tree Zigzag Level Order Traversal
- 白话经典算法系列之七 堆与堆排序
- 白话经典算法之七大排序总结篇
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之十 一道有趣的GOOGLE面试题
- 2014年3月9日星期日(DEMO8-6,画家算法)
- 公司情况介绍及中远期规划
- 在swift 中 使用AFNetworking获取json数据
- 【Swift初见】SourceKitService Terminated