LeetCode Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:linux进去数据库命令 编辑:程序博客网 时间:2024/06/16 02:15
原题链接在这里: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:
/** * 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; }}
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
- 【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
- LeetCode:Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- 黑马程序员—IOS加强视频—oc内存管理
- arduino中断
- C语言的动态内存分配
- 我的GVIM配置文件
- Linux下JNI实现
- LeetCode Binary Tree Zigzag Level Order Traversal
- 职业规划
- 互联网+的困局
- HDU 5414
- Attribute在.net编程中的应用(一)
- Attribute在.net编程中的应用(二)
- HDU 5363 Key Set
- Attribute在.NET编程中的应用(三)
- LintCode 最长单词