What is the main advantage of Morris Traversal for inorder tree traversal?
Morris Traversal allows inorder traversal of a binary tree without using extra space for stack or recursion, by temporarily modifying the tree's structure.
Click to reveal answer
intermediate
In Morris Traversal, what is the purpose of creating a temporary thread (link) from the inorder predecessor to the current node?
The temporary thread helps to return to the current node after visiting its left subtree, enabling traversal without a stack or recursion.
Click to reveal answer
intermediate
What condition indicates that the left subtree of the current node has been fully visited in Morris Traversal?
When the temporary thread from the inorder predecessor points back to the current node, it means the left subtree is fully visited and the thread can be removed.
Click to reveal answer
beginner
Show the basic steps of Morris Inorder Traversal in order.
1. Initialize current as root.
2. While current is not NULL:
a. If current has no left child, print current's data and move to right child.
b. Else find inorder predecessor of current.
c. If predecessor's right is NULL, set it to current (create thread), move current to left child.
d. Else remove thread, print current's data, move current to right child.
Click to reveal answer
intermediate
Why is Morris Traversal considered an in-place algorithm?
Because it uses no extra memory for stack or recursion and only modifies the tree temporarily by creating and removing threads, restoring the original tree structure after traversal.
Click to reveal answer
What data structure does Morris Traversal avoid using for inorder traversal?
AHash Table
BQueue
CStack
DLinked List
✗ Incorrect
Morris Traversal avoids using a stack or recursion by creating temporary threads in the tree.
In Morris Traversal, what is the inorder predecessor of a node?
ARightmost node in the left subtree
BLeftmost node in the right subtree
CParent node
DRoot node
✗ Incorrect
The inorder predecessor is the rightmost node in the left subtree of the current node.
What happens when the inorder predecessor's right pointer is NULL in Morris Traversal?
AMove to right child
BCreate a thread to current node
CRemove the thread
DPrint current node's data
✗ Incorrect
When predecessor's right is NULL, a thread is created to point back to the current node.
When is the thread removed during Morris Traversal?
AWhen predecessor's right points to current node
BWhen predecessor's left is NULL
CAt the start of traversal
DWhen current node has no right child
✗ Incorrect
The thread is removed when the predecessor's right pointer points back to the current node, indicating left subtree is done.
What is the space complexity of Morris Traversal?
AO(n)
BO(n log n)
CO(log n)
DO(1)
✗ Incorrect
Morris Traversal uses constant extra space, O(1), by modifying the tree temporarily.
Explain how Morris Traversal performs inorder traversal without using a stack or recursion.
Think about how the traversal remembers where to return after left subtree.
You got /4 concepts.
Describe the steps to find the inorder predecessor of a node in Morris Traversal.
Focus on the left subtree and rightmost path.
You got /4 concepts.
Practice
(1/5)
1. What is the main advantage of Morris Traversal for inorder tree traversal compared to traditional methods?
easy
A. It only works on binary search trees
B. It is faster than all other traversal methods
C. It uses no extra space like stack or recursion
D. It requires a special tree structure
Solution
Step 1: Understand traditional inorder traversal space usage
Traditional inorder traversal uses recursion or a stack, which requires extra memory proportional to tree height.
Step 2: Identify Morris Traversal space usage
Morris Traversal modifies tree links temporarily to avoid stack or recursion, using O(1) extra space.
Final Answer:
It uses no extra space like stack or recursion -> Option C
Quick Check:
Morris Traversal = O(1) space [OK]
Hint: Morris uses tree links, no stack or recursion needed [OK]
Common Mistakes:
Thinking Morris is faster in time complexity
Assuming it only works on BSTs
Believing it needs special tree nodes
2. Which of the following code snippets correctly initializes the current pointer for Morris inorder traversal in C?
easy
A. struct Node* current = root;
B. struct Node current = root;
C. Node* current = NULL;
D. struct Node* current = NULL;
Solution
Step 1: Understand pointer initialization in C for tree traversal
We need a pointer to the root node to start traversal, so 'struct Node* current = root;' is correct.
Step 2: Check other options for correctness
struct Node current = root; declares a struct variable, not a pointer, which is incorrect. Node* current = NULL; uses 'Node*' without 'struct' keyword, invalid in C. struct Node* current = NULL; initializes current to NULL, which won't start traversal.
Final Answer:
struct Node* current = root; -> Option A
Quick Check:
Pointer to root = struct Node* current = root; [OK]
Hint: Use pointer to root node: struct Node* current = root; [OK]
Common Mistakes:
Using struct variable instead of pointer
Omitting 'struct' keyword in C
Initializing current to NULL instead of root
3. What is the output of the Morris inorder traversal on the following binary tree?
2
/ \
1 3
Assuming the traversal prints node values separated by spaces.
medium
A. 1 3 2
B. 1 2 3
C. 3 2 1
D. 2 1 3
Solution
Step 1: Understand inorder traversal order
Inorder traversal visits left subtree, then root, then right subtree. For this tree, left is 1, root is 2, right is 3.
Step 2: Apply Morris traversal logic
Morris traversal visits nodes in inorder without stack. The output will be "1 2 3 " as it visits left child, root, then right child.
Final Answer:
1 2 3 -> Option B
Quick Check:
Inorder of tree = 1 2 3 [OK]
Hint: Inorder = left, root, right; output matches this order [OK]
Common Mistakes:
Confusing preorder or postorder with inorder
Forgetting spaces in output
Misreading tree structure
4. Identify the bug in this Morris inorder traversal snippet:
while (current != NULL) {
if (current->left == NULL) {
printf("%d ", current->data);
current = current->right;
} else {
struct Node* pre = current->left;
while (pre->right != NULL) {
pre = pre->right;
}
pre->right = current;
current = current->left;
}
}
medium
A. Should use recursion instead of loop
B. Missing initialization of current pointer
C. Incorrect print statement syntax
D. The inner while loop should check pre->right != current
Solution
Step 1: Analyze inner while loop condition
The inner loop finds the rightmost node in left subtree. It should stop if pre->right points back to current to avoid infinite loop.
Step 2: Identify correct condition
The condition must be 'pre->right != NULL && pre->right != current' to detect if thread already exists and avoid infinite loop.
Final Answer:
The inner while loop should check pre->right != current -> Option D
Quick Check:
Loop condition must detect thread to current [OK]
Hint: Check thread link to current in inner loop condition [OK]
Common Mistakes:
Not checking pre->right != current causes infinite loop
Forgetting to restore tree links after traversal
Confusing recursion with Morris traversal
5. Given a binary tree where some nodes have only left children, how does Morris inorder traversal handle these nodes without using stack or recursion?
hard
A. It creates temporary threads from rightmost left child back to current node
B. It skips nodes without right children
C. It uses a stack internally to track nodes
D. It converts the tree into a linked list first
Solution
Step 1: Understand Morris traversal threading
Morris traversal creates temporary links (threads) from the rightmost node of left subtree back to the current node to remember where to return.
Step 2: Apply to nodes with only left children
For nodes with only left children, it finds the rightmost node in left subtree (which may be the left child itself) and creates a thread back to current node, enabling traversal without stack.
Final Answer:
It creates temporary threads from rightmost left child back to current node -> Option A
Quick Check:
Temporary threads enable traversal without stack [OK]
Hint: Threads link back to current node from left subtree's rightmost node [OK]
Common Mistakes:
Assuming nodes without right children are skipped
Thinking Morris uses stack internally
Believing tree is converted to linked list
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.