LeetCode - Binary Tree Level Order Traversal | Darren's Blog



Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level
For space efficiency, we can use two variables to keep track of the number of remaining nodes in the current level, and the number of nodes in the next level.
public ArrayList<ArrayList<Integer>> levelOrder(TreeNode root) {
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        if (root == null)
            return result;
 
        // Used as a queue to save children nodes explored in the next level
        Deque<TreeNode> nodesInALevel = new ArrayDeque<TreeNode>();
        nodesInALevel.add(root);
 
        // Values in the current level
        ArrayList<Integer> valuesInCurrentLevel = new ArrayList<Integer>();
 
        // remaining: number of remaining nodes in the current level;
        // newlyAdded: number of nodes for the next level
        int remaining = 1, newlyAdded = 0;
 
        while(remaining != 0) {
            TreeNode currentNode = nodesInALevel.poll();
            valuesInCurrentLevel.add(currentNode.val);
            remaining--;
            if (currentNode.left != null) {     // Save its left child (if any) to be explored in the next level
                nodesInALevel.add(currentNode.left);
                newlyAdded++;
            }
            if (currentNode.right != null) {    // Save its right child (if any) to be explored in the next level
                nodesInALevel.add(currentNode.right);
                newlyAdded++;
            }
            if (remaining == 0) {       // Current level is done; get ready for the next level
                remaining = newlyAdded;
                newlyAdded = 0;
                result.add(valuesInCurrentLevel);
                valuesInCurrentLevel = new ArrayList<Integer>();
            }
        }
        return result;
    }
Read full article from LeetCode - Binary Tree Level Order Traversal | Darren's Blog

No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts