Guest User

Untitled

a guest
Apr 8th, 2019
688
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. void traverse_leftmost(int& curr, int len) {
  4.   while (true) {
  5.     // Note: (curr * 2 + 1) is the left child of curr.
  6.     int next = curr * 2 + 1;
  7.     if (next >= len) break;
  8.     curr = next;
  9.   }
  10. }
  11.  
  12. void inorder(int a[], int len) {
  13.   if (len == 0) return;
  14.   int curr = 0;
  15.   traverse_leftmost(curr, len);
  16.  
  17.   while(true) {
  18.     printf("%d ", a[curr]);
  19.     // Note: (curr * 2 + 2) is the right child of curr.
  20.     int right_child = curr * 2 + 2;
  21.     if (right_child < len) {
  22.       // Case 1: If a right child exists, travers to right child's leftmost
  23.       // descendant.
  24.       curr = right_child;
  25.       traverse_leftmost(curr, len);
  26.     } else if (curr % 2 == 1) {
  27.       // Case 2: No right child. Curr is a left child. Simply traverse to
  28.       // parent node.
  29.       curr /= 2;
  30.     } else {
  31.       if (curr == 0) {
  32.         // If the root node has no right child. Terminate.
  33.         printf("\n");
  34.         return;
  35.       }
  36.       // Case 3: No right child. Curr is a right child. Keep traversing to
  37.       // parent level until curr is not a right child.
  38.       while (curr % 2 == 0) {
  39.         curr = (curr - 2) / 2;
  40.         if (curr == 0) {
  41.           // If going back to root node from a right child, terminate.
  42.           printf("\n");
  43.           return;
  44.         }
  45.       }
  46.       curr /= 2;
  47.     }
  48.   }
  49. }
  50.  
  51. int main() {
  52.   int len = 6;
  53.   int input[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  54.   inorder(input, 0);
  55.   inorder(input, 1);
  56.   inorder(input, 2);
  57.   inorder(input, 3);
  58.   inorder(input, 4);
  59.   inorder(input, 5);
  60.   inorder(input, 6);
  61.   inorder(input, 7);
  62.   inorder(input, 8);
  63. }
Advertisement
Add Comment
Please, Sign In to add comment