leedcode做题总结,题目Binary Tree Level Order TraversalI/II 2012/09/28
2014-07-10 22:18
543 查看
树的层序历遍,II中反序输出用addFirst()添加即可
Update 2015/08/18:这道题说其实和层序历遍求层数差不多,需要current和next分别记录本层和下一层的节点个数即可,下面的代码是1的
public static List<List<Integer>> levelOrder(TreeNode root) { LinkedList<List<Integer>> l = new LinkedList<List<Integer>>();//里面是List不是LinkedList LinkedList<Integer> l2 = new LinkedList<Integer>(); if(root==null)return l; Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); int m=1; int n=0; do{ root = q.poll(); l2.add(root.val); m--; if(root.left!=null){ q.offer(root.left); n++; } if(root.right!=null){ q.offer(root.right); n++; } //处理放添加节点后面 if(m==0){ l.add(l2); l2 = new LinkedList<Integer>(); m=n; n=0; } }while (n!=0||m!=0); return l; }
public static List<List<Integer>> levelOrder2(TreeNode root) { LinkedList<List<Integer>> l = new LinkedList<List<Integer>>(); LinkedList<Integer> l2 = new LinkedList<Integer>(); if(root==null)return l; Queue<TreeNode> q = new LinkedList<TreeNode>(); q.offer(root); int m=1; int n=0; do{ root = q.poll(); l2.add(root.val); m--; if(root.left!=null){ q.offer(root.left); n++; } if(root.right!=null){ q.offer(root.right); n++; } //处理放添加节点后面 if(m==0){ l.addLast(l2); l2 = new LinkedList<Integer>(); m=n; n=0; } }while (n!=0||m!=0); return l; }
Update 2015/08/18:这道题说其实和层序历遍求层数差不多,需要current和next分别记录本层和下一层的节点个数即可,下面的代码是1的
/** * 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: Level order a list of lists of integer */ public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) { // write your code here ArrayList<ArrayList<Integer>> res = new ArrayList<>(); Queue<TreeNode> q = new LinkedList<>(); if (root == null) return res; int current = 1; int next = 0; ArrayList<Integer> in = new ArrayList<>(); while (root != null){ in.add(root.val); if (root.left != null){ q.add(root.left); next++; } if (root.right != null){ q.add(root.right); next++; } if (q.size() != 0){ root = q.poll(); current--; if (current == 0){ res.add(in); in = new ArrayList<Integer>(); current = next; next = 0; } } else { res.add(in); break; } } return res; } }
相关文章推荐
- leedcode做题总结,题目Binary Tree Zigzag Level Order Traversal 2012/09/28
- leedcode做题总结,题目Binary Tree Postorder Traversal-------- 2013/11/07
- LeetCode Online Judge 题目C# 练习 - Binary Tree Level Order Traversal II
- leedcode做题总结,题目Minimum Depth of Binary Tree 2012/10/09
- leedcode做题总结,题目Flatten Binary Tree to Linked List 2012/10/14
- [leedcode 107] Binary Tree Level Order Traversal II
- leedcode做题总结, 题目Construct Binary Tree from Preorder。。。105/106
- leedcode做题总结,题目Binary Tree Preorder Traversal 2013/11/05
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- [leetcode]Binary Tree Level Order Traversal II
- [LeetCode]Binary Tree Level Order Traversal II
- [Leetcode]Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- [leetcode]Binary Tree Level Order Traversal II
- LeetCode Binary Tree Level Order Traversal II
- Binary Tree Level Order Traversal II
- LeetCode Online Judge 题目C# 练习 - Binary Tree Level Order Traversal