标签:des style blog http color io
Given a binary tree, return the bottom-up level order traversal of its nodes‘ values. (ie, from left to right, level by level from leaf to root).
For example:
Given binary tree {3,9,20,#,#,15,7}
,
3 / 9 20 / 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3] ]
题解:
类似http://www.cnblogs.com/sunshineatnoon/p/3826613.html,无非这次是要从最后一层开始。只要在把每一层的节点加入到最终的list的时候用插入到list头的方法就可以了。不过这里学习到一种更简便的层次遍历的方法,不用记录每一层的起始节点,而是在遍历上一层的时候就记录这一层的节点个数,即统计上一层节点的孩子的总个数,这要比在遍历上一层时找到这一层的起始节点容易的多。
代码如下:
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public List<List<Integer>> levelOrderBottom(TreeNode root) { 12 List<List<Integer>> answer = new ArrayList<List<Integer>>(); 13 Queue<TreeNode> q = new LinkedList<TreeNode>(); 14 15 if(root == null) 16 return answer; 17 18 q.offer(root); 19 int currNodeNum = 1; 20 21 while(currNodeNum != 0){ 22 int nextNodeNum = 0; 23 ArrayList<Integer> currNodeList = new ArrayList<Integer>(); 24 while(currNodeNum != 0){ 25 TreeNode node = q.poll(); 26 27 currNodeNum--; 28 currNodeList.add(node.val); 29 30 if(node.left != null){ 31 q.offer(node.left); 32 nextNodeNum ++; 33 } 34 if(node.right != null){ 35 q.offer(node.right); 36 nextNodeNum++; 37 } 38 39 } 40 answer.add(0,currNodeList); 41 currNodeNum = nextNodeNum; 42 } 43 return answer; 44 } 45 }
上述代码中currNodeNum记录当前层节点的数目,每从队列中弹出一个节点,currNodeNum值减1,当currNodeNum值减为0,当前层次遍历结束。在遍历当前层的过程中,顺便用nextNodeNum统计下一层节点呃个数,每当当前层节点有一个左子或者右子的时候,nextNodeNum值就加1。当下一层没有节点的时候,遍历结束。
第40行代码,是将每层得到的节点list插入到answer的最前面,这样就可以满足题目bottom-up的要求了。
【leetcode刷题笔记】Binary Tree Level Order Traversal II,布布扣,bubuko.com
【leetcode刷题笔记】Binary Tree Level Order Traversal II
标签:des style blog http color io
原文地址:http://www.cnblogs.com/sunshineatnoon/p/3850706.html