leetcode(27).107. Binary Tree Level Order Traversal II
2016-11-22 19:21
309 查看
题意:给定一个二叉树,反序层次遍历其结点。(从左到右,从下到上)
初步分析:
从左到右是可以的,这没什么,从右到左都只需要调换入队顺序即可。关键是树结点从下到上是找不到的。所以直接从下到上找是不可能的。我们先假定从上到下从右到左的一层一层的搜索。每层返回一个list,这些list如果能反着装进List即可。那么先放入栈中,再取出。
当然多出一个循环是不太好的:我们可以不用数组而用链表,每次头插。
初步分析:
从左到右是可以的,这没什么,从右到左都只需要调换入队顺序即可。关键是树结点从下到上是找不到的。所以直接从下到上找是不可能的。我们先假定从上到下从右到左的一层一层的搜索。每层返回一个list,这些list如果能反着装进List即可。那么先放入栈中,再取出。
/** * 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>> levelOrderBottom(TreeNode root) { List<List<Integer>> lists = new ArrayList(); if(root == null) return lists; Stack<List<Integer>> stack = new Stack<List<Integer>>(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while(!queue.isEmpty()) { List<Integer> list = new ArrayList(); int layer = queue.size(); while(layer>0) { TreeNode node = queue.poll(); list.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); layer--; } stack.push(list); } while(!stack.isEmpty()) { lists.add(stack.pop()); } return lists; } }
当然多出一个循环是不太好的:我们可以不用数组而用链表,每次头插。
List<List<Integer>> lists = new LinkedList<>();
lists.add(0,list);
/** * 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>> levelOrderBottom(TreeNode root) { List<List<Integer>> lists = new LinkedList<>(); if(root == null) return lists; Queue<TreeNode> queue = new LinkedList(); TreeNode node = root; queue.add(node); while(!queue.isEmpty()) { List<Integer> list = new ArrayList<>(); int layer = queue.size(); //记录当前层的结点个数 while(layer != 0) //把当前层的结点取出来处理完(不是整个队列处理完),处理完后队列里的结点恰好是下一层所有的结点。 { node = queue.poll(); list.add(node.val); if(node.left != null) queue.add(node.left); if(node.right != null) queue.add(node.right); layer--; } lists.add(0,list); } return lists; } }
相关文章推荐
- LeetCode 27. Remove Element
- [勇者闯LeetCode] 27. Remove Element
- leetcode 刷题之路 27 Insertion Sort List
- leetcode_27. Remove Element ? 待解决
- LeetCode26/27/80/75 Remove Duplicates from Sorted Array I and II/Remove Element/Set Colors**
- LeetCode | #27 Remove Element
- leetcode27 Remove Element
- leetcode 27. Remove Element移出元素(双指针)
- Leetcode----27 Remove Element
- leetcode--27. Remove Element
- LeetCode 笔记27 Two Sum III - Data structure design
- LeetCode(27)-Remove Element
- leetcode 27 Remove Element(移除数组中的与val相等的元素)
- LeetCode 27:Remove Element
- [LeetCode]27. Remove Element
- LeetCode - 27. Remove Element
- leetcode 27 removeElement
- Leetcode 27. Remove Element (Easy) (cpp)
- leetcode 27 Remove Element
- leetcode解题报告(27):Reverse Linked List