Inorder Non-threaded Binary Tree Traversal without Recursion or Stack - GeeksforGeeks



Inorder Non-threaded Binary Tree Traversal without Recursion or Stack - GeeksforGeeks

We have discussed Thread based Morris Traversal. Can we do inorder traversal without threads if we have parent pointers available to us?

Input: Root of Below Tree [Every node of          tree has parent pointer also]          10        /    \       5     100             /  \            80  120   Output: 5 10 80 100 120  The code should not extra space (No Recursion  and stack)  

We strongly recommend you to minimize your browser and try this yourself first.
In inorder traversal, we follow "left root right". We can move to children using left and right pointers. Once a node is visited, we need to move to parent also. For example, in the above tree, we need to move to 10 after printing 5. For this purpose, we use parent pointer. Below is algorithm.

1. Initialize current node as root  2. Initialize a flag: leftdone = false;  3. Do following while root is not NULL       a) If leftdone is false, set current node as leftmost          child of node.        b) Mark leftdone as true and print current node.       c) If right child of current nodes exists, set current          as right child and set leftdone as false.       d) Else If parent exists, If current node is left child          of its parent, set current node as parent.           If current node is right child, keep moving to ancestors          using parent pointer while current node is right child          of its parent.         e) Else break (We have reached back to root)  

Illustration:

Let us consider below tree for illustration.          10        /    \       5     100             /  \            80  120     Initialize: Current node = 10, leftdone = false    Since leftdone is false, we move to 5 (3.a), print it  and set leftdone = true.    Now we move to parent of 5 (3.d). Node 10 is   printed because leftdone is true.    We move to right of 10 and set leftdone as false (3.c)    Now current node is 100. Since leftdone is false, we move  to 80 (3.a) and set leftdone as true.  We print current   node 80 and move back to parent 100 (3.d).  Since leftdone  is true, we print current node 100.     Right of 100 exists, so we move to 120 (3.c).   We print  current node 120.    Since 120 is right child of its parent we keep moving to parent  while parent is right child of its parent.  We reach root. So  we break the loop and stop

Below is C++ implementation of above algorithm. Note that the implementation uses Binary Search Tree instead of Binary Tree. We can use the same function inorder() for Binary Tree also. The reason for using Binary Search Tree in below code is, it is easy to construct a Binary Search Tree with parent pointers and easy to test the outcome (In BST inorder traversal is always sorted).


Read full article from Inorder Non-threaded Binary Tree Traversal without Recursion or Stack - GeeksforGeeks


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