Binary Tree Zigzag Level Order Traversal
来源:互联网 发布:r语言编程艺术 编辑:程序博客网 时间:2024/06/05 05:25
Fair Binary Tree Zigzag Level Order TraversalMy Submissions
29%AcceptedGiven 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).
ExampleGiven binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]
SOLUTION 1. When add the nodes to level, alternate the direction. USE ONE QUEUE
The first level contains only the root node. The direction is from left to right, that is add at last.The next level is from right to left, add at first.<span style="color:#717171;">/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(root == null) { return rst; } ArrayList<Integer> level = new ArrayList(); Queue<TreeNode> q = new LinkedList(); q.add(root); int direction = 0; </span><span style="color:#ff6666;"> //direction % 2 ==0 add last; //else add first</span><span style="color:#717171;"> while(!q.isEmpty()) { int size = q.size(); for(int i = 0; i < size; i++) { TreeNode temp = q.poll(); </span><span style="color:#ff6666;">if(direction % 2 == 0) { level.add(temp.val); } else { level.add(0, temp.val); }</span><span style="color:#717171;"> if(temp.left != null) { q.add(temp.left); } if(temp.right != null) { q.add(temp.right); } } rst.add(new ArrayList(level)); level = new ArrayList<Integer>(); direction++; } return rst; }}</span>
2. USE TWO STACKS
NORMAL ORDER: push left, push right!NORMAL ORDER: push right, push leftalternate between normal and !normal order
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(root == null) { return rst; } ArrayList<Integer> level = new ArrayList(); <span style="color:#ff0000;">Stack<TreeNode> cur = new Stack(); Stack<TreeNode> next = new Stack();</span> cur.add(root); <span style="color:#ff0000;">boolean normalOrder = true;</span> while(!cur.isEmpty()) { while(!cur.isEmpty()) { TreeNode temp = cur.pop(); level.add(temp.val); <span style="color:#ff0000;"> if(normalOrder) { if(temp.left != null) { next.push(temp.left); } if(temp.right != null) { next.push(temp.right); } } else { if(temp.right != null) { next.push(temp.right); } if(temp.left != null) { next.push(temp.left); } }</span> } rst.add(new ArrayList(level)); level = new ArrayList<Integer>(); cur = next; next = new Stack<TreeNode>(); <span style="color:#ff0000;"> normalOrder = !normalOrder;</span> } return rst; }}
Fair Binary Tree Zigzag Level Order TraversalMy Submissions
29%AcceptedGiven 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).
ExampleGiven binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]
SOLUTION 1. When add the nodes to level, alternate the direction. USE ONE QUEUE
The first level contains only the root node. The direction is from left to right, that is add at last.The next level is from right to left, add at first.<span style="color:#717171;">/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(root == null) { return rst; } ArrayList<Integer> level = new ArrayList(); Queue<TreeNode> q = new LinkedList(); q.add(root); int direction = 0; </span><span style="color:#ff6666;"> //direction % 2 ==0 add last; //else add first</span><span style="color:#717171;"> while(!q.isEmpty()) { int size = q.size(); for(int i = 0; i < size; i++) { TreeNode temp = q.poll(); </span><span style="color:#ff6666;">if(direction % 2 == 0) { level.add(temp.val); } else { level.add(0, temp.val); }</span><span style="color:#717171;"> if(temp.left != null) { q.add(temp.left); } if(temp.right != null) { q.add(temp.right); } } rst.add(new ArrayList(level)); level = new ArrayList<Integer>(); direction++; } return rst; }}</span>
2. USE TWO STACKS
NORMAL ORDER: push left, push right!NORMAL ORDER: push right, push leftalternate between normal and !normal order
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(root == null) { return rst; } ArrayList<Integer> level = new ArrayList(); <span style="color:#ff0000;">Stack<TreeNode> cur = new Stack(); Stack<TreeNode> next = new Stack();</span> cur.add(root); <span style="color:#ff0000;">boolean normalOrder = true;</span> while(!cur.isEmpty()) { while(!cur.isEmpty()) { TreeNode temp = cur.pop(); level.add(temp.val); <span style="color:#ff0000;"> if(normalOrder) { if(temp.left != null) { next.push(temp.left); } if(temp.right != null) { next.push(temp.right); } } else { if(temp.right != null) { next.push(temp.right); } if(temp.left != null) { next.push(temp.left); } }</span> } rst.add(new ArrayList(level)); level = new ArrayList<Integer>(); cur = next; next = new Stack<TreeNode>(); <span style="color:#ff0000;"> normalOrder = !normalOrder;</span> } return rst; }}
Fair Binary Tree Zigzag Level Order TraversalMy Submissions
29%AcceptedGiven 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).
ExampleGiven binary tree {3,9,20,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7]]
SOLUTION 1. When add the nodes to level, alternate the direction. USE ONE QUEUE
Fair Binary Tree Zigzag Level Order TraversalMy Submissions
29%
Accepted
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).
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]]
The first level contains only the root node. The direction is from left to right, that is add at last.
The next level is from right to left, add at first.
<span style="color:#717171;">/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(root == null) { return rst; } ArrayList<Integer> level = new ArrayList(); Queue<TreeNode> q = new LinkedList(); q.add(root); int direction = 0; </span><span style="color:#ff6666;"> //direction % 2 ==0 add last; //else add first</span><span style="color:#717171;"> while(!q.isEmpty()) { int size = q.size(); for(int i = 0; i < size; i++) { TreeNode temp = q.poll(); </span><span style="color:#ff6666;">if(direction % 2 == 0) { level.add(temp.val); } else { level.add(0, temp.val); }</span><span style="color:#717171;"> if(temp.left != null) { q.add(temp.left); } if(temp.right != null) { q.add(temp.right); } } rst.add(new ArrayList(level)); level = new ArrayList<Integer>(); direction++; } return rst; }}</span>
2. USE TWO STACKS
NORMAL ORDER: push left, push right
!NORMAL ORDER: push right, push left
alternate between normal and !normal order
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of binary tree. * @return: A list of lists of integer include * the zigzag level order traversal of its nodes' values */ public ArrayList<ArrayList<Integer>> zigzagLevelOrder(TreeNode root) { ArrayList<ArrayList<Integer>> rst = new ArrayList<ArrayList<Integer>>(); if(root == null) { return rst; } ArrayList<Integer> level = new ArrayList(); <span style="color:#ff0000;">Stack<TreeNode> cur = new Stack(); Stack<TreeNode> next = new Stack();</span> cur.add(root); <span style="color:#ff0000;">boolean normalOrder = true;</span> while(!cur.isEmpty()) { while(!cur.isEmpty()) { TreeNode temp = cur.pop(); level.add(temp.val); <span style="color:#ff0000;"> if(normalOrder) { if(temp.left != null) { next.push(temp.left); } if(temp.right != null) { next.push(temp.right); } } else { if(temp.right != null) { next.push(temp.right); } if(temp.left != null) { next.push(temp.left); } }</span> } rst.add(new ArrayList(level)); level = new ArrayList<Integer>(); cur = next; next = new Stack<TreeNode>(); <span style="color:#ff0000;"> normalOrder = !normalOrder;</span> } return rst; }}
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
- 递进----求二进制
- 在VC中使用自定义资源,FindResource,LoadResource,LockResource
- 关于网狐棋牌6603源码的整理、编译和搭建
- 多个Fragment的Activity中上下文菜单的处理(ContextMenu)
- 第十二周项目2-OJ平台中多输入形式的处理2 分离正整数
- Binary Tree Zigzag Level Order Traversal
- Mapping Coordinates for Drawn Objects(为绘制对象映射坐标)
- c#使用实例之我的c#浏览器
- 中水处理设备:城市中水回用主要途径
- 关于for循环中break和return区别。
- Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)
- SET QUOTED_IDENTIFIER OFF是什么意思
- 第十二周项目一阅读程序(5)
- cURL