[LeetCode]Binary Tree Zigzag Level Order Traversal
2016-11-17 16:31
363 查看
Question
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
return its zigzag level order traversal as:
本题难度Medium。迭代法用队列实现,递归法可以用栈和队列分别实现。
1、迭代+队列
【复杂度】
时间 O(b^(h+1)-1) 空间 O(b^h)
【思路】
与[LeetCode]Binary Tree Level Order Traversal差不多,区别点就在于向
如果层序
如果层序
【代码】
2、栈+递归
【复杂度】
时间 O(b^(h+1)-1) 空间 O(b^h)
【思路】
根据层序进行区分:
如果层序
如果层序
【代码】
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] ]
本题难度Medium。迭代法用队列实现,递归法可以用栈和队列分别实现。
1、迭代+队列
【复杂度】
时间 O(b^(h+1)-1) 空间 O(b^h)
【思路】
与[LeetCode]Binary Tree Level Order Traversal差不多,区别点就在于向
list加入
n.val的方式:
如果层序
level为偶数,逆序加入
如果层序
level为奇数,顺序加入
【代码】
/** * 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) { //require List<List<Integer>> ans=new LinkedList<>(); Queue<TreeNode> q=new LinkedList<>(); if(root!=null)q.add(root); int level=1; //invariant while(!q.isEmpty()){ List<Integer> list=new LinkedList<>(); int size=q.size(); for(int i=0;i<size;i++){ TreeNode n=q.remove(); if(level%2==0) list.add(0,n.val); else list.add(n.val); if(n.left!=null)q.add(n.left); if(n.right!=null)q.add(n.right); } ans.add(list); level++; } //ensure return ans; } }
2、栈+递归
【复杂度】
时间 O(b^(h+1)-1) 空间 O(b^h)
【思路】
根据层序进行区分:
如果层序
level为奇数,节点的儿子先左儿子后右儿子入栈
如果层序
level为偶数,节点的儿子先右儿子后左儿子入栈
【代码】
/** * 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) { //require List<List<Integer>> ans=new LinkedList<>(); Stack<TreeNode> stack=new Stack<>(); if(root!=null)stack.push(root); //invariant helper(stack,1,ans); //ensure return ans; } public void helper(Stack<TreeNode> stack,int level,List<List<Integer>> ans){ //base case if(stack.isEmpty()) return; Stack<TreeNode> nextStack=new Stack<>(); List<Integer> list=new LinkedList<>(); while(!stack.isEmpty()){ TreeNode n=stack.pop(); list.add(n.val); if(level%2==0){ if(n.right!=null)nextStack.push(n.right); if(n.left!=null)nextStack.push(n.left); }else{ if(n.left!=null)nextStack.push(n.left); if(n.right!=null)nextStack.push(n.right); } } ans.add(list); helper(nextStack,level+1,ans); } }
相关文章推荐
- Leetcode-binary-tree-zigzag-level-order-traversal
- LeetCode_Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal - LeetCode
- 【LeetCode】Binary Tree Zigzag Level Order Traversal--- 层序遍历二叉树
- leetcode笔记:Binary Tree Zigzag Level Order Traversal
- LeetCode(103) Binary Tree Zigzag Level Order Traversal
- [LeetCode] Binary Tree Zigzag Level Order Traversal
- LeetCode: Binary Tree Zigzag Level Order Traversal
- LeetCode 103 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
- [LeetCode]Binary Tree Zigzag Level Order Traversal
- LeetCode 103:Binary Tree Zigzag Level Order Traversal
- LeetCode题解-103-Binary Tree Zigzag Level Order Traversal
- LeetCode_103 Binary Tree Zigzag Level Order Traversal
- LeetCode Binary Tree Zigzag Level Order Traversal
- Binary Tree Zigzag Level Order Traversal [LeetCode]
- Leetcode: Binary Tree Zigzag Level Order Traversal