LeetCode - Populating Next Right Pointers in Each Node | Darren's Blog



Populate each next pointer to point to its next right node. If there is no next right node, the next pointer should be set to NULL. Initially, all next pointers are set to NULL.
  • You may only use constant extra space.
  • You may assume that it is a perfect binary tree (ie, all leaves are at the same level, and every parent has two children).
Given the following perfect binary tree,
        1
      /  \
     2    3
    / \  / \
   4  5  6  7
After calling your function, the tree should look like:
        1 -> NULL
      /  \
     2 -> 3 -> NULL
    / \  / \
   4->5->6->7 -> NULL
The order of visits of tree node is the same as LeetCode - Binary Tree Level Order Traversal. But now we do not need to maintain a queue, since the reference  next gives exactly the next node in the same level. So we can work on each level, and visit each node in a level in sequence.
public void connect(TreeLinkNode root) {
        if (root == null)   // Empty tree
            return;
 
        TreeLinkNode headOfNextLevel = root;
 
        // Between levels
        while(headOfNextLevel != null) {
            // Initialize tailOfNextLevel and current, and update headOfNextLevel to null
            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 && current.left != null)
                    headOfNextLevel = current.left;
 
                // Not a leaf; link its children
                if (current.left != null)
                    current.left.next = current.right;
 
                // Link the currently last node in the next level to the left subtree of current node
                if (tailOfNextLevel != null)
                    tailOfNextLevel.next = current.left;
 
                // Update tailOfNextLevel to the right subtree, and
                // move to the next node in the same level
                tailOfNextLevel = current.right;
                current = current.next;
            }
        }
    }
Read full article from LeetCode - Populating Next Right Pointers in Each Node | 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