LeetCode Binary Tree Zigzag Level Order Traversal
2015-08-21 07:48
459 查看
原题链接在这里:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
这道题是BFS的变形,与Binary Tree Level Order Traversal相似。但是要求偶数行从左到右,奇数行从右到左。
这种顺序正反交替可以用两个stack来实现。一个用来读取,一个用来存储下一层节点。
Time O(n), Space O(n).
Note: 1. 内层loop表示一行,每当一行走完,stk就会变为空,stk需更新成newStk. 外层loop是走完整个树。所以level不要忘记在外层loop更新。
2. 只有当ls.size()>0时,外层loop才会把ls加到res里,如果没有这个限定条件的话会在最后加上一个空的ls到res里。
AC Java:
这道题是BFS的变形,与Binary Tree Level Order Traversal相似。但是要求偶数行从左到右,奇数行从右到左。
这种顺序正反交替可以用两个stack来实现。一个用来读取,一个用来存储下一层节点。
Time O(n), Space O(n).
Note: 1. 内层loop表示一行,每当一行走完,stk就会变为空,stk需更新成newStk. 外层loop是走完整个树。所以level不要忘记在外层loop更新。
2. 只有当ls.size()>0时,外层loop才会把ls加到res里,如果没有这个限定条件的话会在最后加上一个空的ls到res里。
AC Java:
/** * 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<Integer>> res = new ArrayList<List<Integer>>(); if(root == null){ return res; } List<Integer> ls = new ArrayList<Integer>(); Stack<TreeNode> stk = new Stack<TreeNode>(); stk.push(root); ls.add(root.val); res.add(ls); int level = 1; while(!stk.empty()){ Stack<TreeNode> newStk = new Stack<TreeNode>(); ls = new ArrayList<Integer>(); while(!stk.empty()){ TreeNode tn = stk.pop(); if(level%2 == 0){ if(tn.left != null){ ls.add(tn.left.val); newStk.push(tn.left); } if(tn.right != null){ ls.add(tn.right.val); newStk.push(tn.right); } }else{ if(tn.right != null){ ls.add(tn.right.val); newStk.push(tn.right); } if(tn.left != null){ ls.add(tn.left.val); newStk.push(tn.left); } } } level++; if(ls.size()>0){ //error res.add(ls); } stk = newStk; } return res; } }
相关文章推荐
- LeetCode Binary Tree Zigzag Level Order Traversal
- 动归皆背包——那些做过的背包
- 8.20学习总结
- 成长之路--项目小组长的初步感受
- Attribute在.NET编程中的应用(五)
- Attribute在.NET编程中的应用(四)
- Attribute在.NET编程中的应用(三)
- HDU 5363 Key Set
- Attribute在.net编程中的应用(二)
- Attribute在.net编程中的应用(一)
- 原生js实现ajax用于简单的签到或登录
- POJ 1543 解题报告
- C语言的动态内存分配
- 向富人学习
- 黑马程序员—IOS加强视频—oc内存管理
- CODEVS 3943 数学奇才琪露诺
- hibernate简单入门教程
- Best Time to Buy and Sell Stock IV****
- Ubuntu上部署Ghost博客
- codevs 1540 银河英雄传说