Leetcode: Populating Next Right Pointers in Each Node II (java)



Follow up for problem "Populating Next Right Pointers in Each Node".
What if the given tree could be any binary tree? Would your previous solution still work?
Note:
  • You may only use constant extra space.
For example,
Given the following binary tree,
         1
       /  \
      2    3
     / \    \
    4   5    7
After calling your function, the tree should look like:
         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \
    4-> 5 -> 7 -> NULL
Iterative Version from http://www.darrensunny.me/leetcode-populating-next-right-pointers-in-each-node-ii/
public void connect(TreeLinkNode root) {
        if (root == null)   // Empty tree
            return;
 
        TreeLinkNode headOfNextLevel = root;
 
        // Between levels
        while(headOfNextLevel != null) {
            // Initialize tailOfNextLevel and current
            TreeLinkNode tailOfNextLevel = null, current = headOfNextLevel;
            headOfNextLevel = null;
 
            // Within a level
            while(current != null) {
                // Update headOfNextLevel if we find the first node in the next level
                if (headOfNextLevel == null) {
                    if (current.left != null)
                        headOfNextLevel = current.left;
                    else if (current.right != null)
                        headOfNextLevel = current.right;
                }
 
                // Link its two subtrees if both exist
                if (current.left != null && current.right != null)
                    current.left.next = current.right;
 
                if (tailOfNextLevel != null) {
                    // Link the currently last node in the next level to a subtree (if any) of current node
                    if (current.left != null && current.right != null) {
                        tailOfNextLevel.next = current.left;
                        tailOfNextLevel = current.right;
                    } else if (current.left != null) {
                        tailOfNextLevel.next = current.left;
                        tailOfNextLevel = current.left;
                    } else if (current.right != null) {
                        tailOfNextLevel.next = current.right;
                        tailOfNextLevel = current.right;
                    }
                } else if (headOfNextLevel != null) {
                    // The first node in the next level has been found
                    if (headOfNextLevel.next != null)
                        tailOfNextLevel = headOfNextLevel.next;
                    else
                        tailOfNextLevel = headOfNextLevel;
                }
 
                // Move to the next node in the same level
                current = current.next;
            }
        }
    }
Read full article from Leetcode: Populating Next Right Pointers in Each Node II (java) - Muscler的专栏 - 博客频道 - CSDN.NET

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