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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its bottom-up level order traversal as:
[ [15,7], [9,20], [3]
]
package leetCode; import java.util.LinkedList; import java.util.List; import java.util.Queue; /** * Created by lxw, liwei4939@126.com on 2018/3/21. */ public class L107_BinaryTreeLevelOrder { public List<List<Integer>> levelOrderBottom(TreeNode root) { List<List<Integer>> res = new LinkedList<>(); if (root == null){ return res; } Queue<TreeNode> queue = new LinkedList<>(); TreeNode last = root; TreeNode nlast = null; queue.offer(root); List<Integer> lay = new LinkedList<>(); while (!queue.isEmpty()){ root = queue.poll(); lay.add(root.val); if (root.left != null){ queue.offer(root.left); nlast = root.left; } if (root.right != null){ queue.offer(root.right); nlast = root.right; } if (root == last){ last = nlast; res.add(0, lay); lay = new LinkedList<>(); } } return res; } public static void main(String[] args){ L107_BinaryTreeLevelOrder tmp = new L107_BinaryTreeLevelOrder(); TreeNode root = new TreeNode(3); root.left = new TreeNode(9); root.right = new TreeNode(20); root.right.left = new TreeNode(15); root.right.right = new TreeNode(7); List<List<Integer>> res = tmp.levelOrderBottom(root); System.out.println(res); } }