DEV Community

Harsh Yadav
Harsh Yadav

Posted on

Inorder Traversal of Binary Tree

Sure. Your tree is:

        1
       / \
      2   3
     / \   \
    4   5   6
Enter fullscreen mode Exit fullscreen mode

We want inorder = Left → Root → Right.

Let's dry-run the iterative code.

Initial state

current = root;   // 1
stack = []
result = []
Enter fullscreen mode Exit fullscreen mode

Step 1 — Go left

while (current) {
    stk.push(current);
    current = current->left;
}
Enter fullscreen mode Exit fullscreen mode

Push 1:

stack = [1]
current = 2
Enter fullscreen mode Exit fullscreen mode

Push 2:

stack = [1, 2]
current = 4
Enter fullscreen mode Exit fullscreen mode

Push 4:

stack = [1, 2, 4]
current = nullptr
Enter fullscreen mode Exit fullscreen mode

Now we stop because there is no more left child.


Step 2 — Process 4

current = stk.top();  // 4
stk.pop();
result.push_back(current->val);
Enter fullscreen mode Exit fullscreen mode

Now:

stack  = [1, 2]
result = [4]
Enter fullscreen mode Exit fullscreen mode

Then:

current = current->right;
Enter fullscreen mode Exit fullscreen mode

4 has no right child:

current = nullptr
Enter fullscreen mode Exit fullscreen mode

Step 3 — Process 2

Inner while doesn't run because current == nullptr.

current = stk.top();  // 2
stk.pop();
result.push_back(2);
Enter fullscreen mode Exit fullscreen mode

Now:

stack  = [1]
result = [4, 2]
Enter fullscreen mode Exit fullscreen mode

Then:

current = current->right;
Enter fullscreen mode Exit fullscreen mode

2's right child is 5:

current = 5
Enter fullscreen mode Exit fullscreen mode

Step 4 — Process 5

Push 5:

stack = [1, 5]
current = nullptr
Enter fullscreen mode Exit fullscreen mode

Process 5:

result = [4, 2, 5]
stack = [1]
Enter fullscreen mode Exit fullscreen mode

5 has no right child:

current = nullptr
Enter fullscreen mode Exit fullscreen mode

Step 5 — Process 1

Take from stack:

current = 1
stack = []
result = [4, 2, 5, 1]
Enter fullscreen mode Exit fullscreen mode

Then:

current = current->right;
Enter fullscreen mode Exit fullscreen mode

1's right child is 3:

current = 3
Enter fullscreen mode Exit fullscreen mode

Step 6 — Go to 3's right side

3 has no left child, so process 3:

result = [4, 2, 5, 1, 3]
Enter fullscreen mode Exit fullscreen mode

Then:

current = current->right;
Enter fullscreen mode Exit fullscreen mode

3's right child is 6.

current = 6
Enter fullscreen mode Exit fullscreen mode

Process 6:

result = [4, 2, 5, 1, 3, 6]
Enter fullscreen mode Exit fullscreen mode

6 has no children, so:

current = nullptr
stack = []
Enter fullscreen mode Exit fullscreen mode

Now the outer condition:

while (current || !stk.empty())
Enter fullscreen mode Exit fullscreen mode

becomes:

while (false || false)
Enter fullscreen mode Exit fullscreen mode

So the loop ends.

Final answer

[4, 2, 5, 1, 3, 6]
Enter fullscreen mode Exit fullscreen mode

The key thing to notice is that the stack lets us pause nodes like 1 and 2 while we go deeper into their left children.

Top comments (0)