Binary Tree Level Order Traversal II

来源:互联网 发布:奥迪a3轮毂数据 编辑:程序博客网 时间:2024/05/16 07:41

Binary Tree Level Order Traversal II

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]]

 This is a typical level order traversal problem.  My thought is to use a queue to traverse the element level by level. At first, put the root element into the queue. Then mark the root element and if it has right node or left node, put them into the queue and pop the root element out. Repeat the same process to all the other nodes in the queue. Every time entering the while loop, we need to get the size of the current queue because the size of current queue is the size of the current level.


/** * 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>> ret = new ArrayList<List<Integer>>();        List<List<Integer>> retReverse = new ArrayList<List<Integer>>();        if (root == null)            return ret;                Queue<TreeNode> queue = new LinkedList<TreeNode>();        queue.offer(root);                while(!queue.isEmpty()) {            int size = queue.size();            List<Integer> list = new ArrayList<Integer>();                        for (int i = 0; i < size; i++) {                TreeNode node = queue.poll();                if (node.left != null)                    queue.offer(node.left);                if (node.right != null)                    queue.offer(node.right);                                    list.add(node.val);            }                        ret.add(list);        }                for (int i = ret.size() - 1; i >= 0; i--)            retReverse.add(ret.get(i));                                return retReverse;    }}


0 0