📖 Scenario: Imagine you have a family tree represented as a binary tree. You want to visit all the family members who are on the outer edge of the tree, starting from the top ancestor, going down the left side, then the leaves from left to right, and finally up the right side.
🎯 Goal: Build a program in C that performs a boundary traversal of a binary tree. The program will print the nodes on the boundary in the correct order: root, left boundary (excluding leaves), all leaves, and right boundary (excluding leaves) in reverse.
📋 What You'll Learn
Define a binary tree node structure with integer data and left and right pointers
Create a binary tree with the exact nodes and structure given
Implement functions to print the left boundary, leaves, and right boundary
Combine these functions to print the full boundary traversal
Print the boundary traversal nodes in one line separated by spaces
💡 Why This Matters
🌍 Real World
Boundary traversal helps in graphical rendering, printing the outline of tree-like structures, and in certain tree-based algorithms where edge nodes are important.
💼 Career
Understanding tree traversals, including boundary traversal, is essential for software engineers working with hierarchical data, UI trees, and in technical interviews.
Progress0 / 4 steps
1
Create the binary tree structure and nodes
Define a struct called Node with an int data, and two pointers left and right to Node. Then create the following binary tree nodes and link them exactly as shown: 1 as root, 2 as root's left child, 3 as root's right child, 4 as left child of 2, 5 as right child of 2, 6 as left child of 3, and 7 as right child of 3.
DSA C
Hint
Start by defining the Node structure. Then write a helper function newNode to create nodes. Finally, create the root and link all children as described.
2
Add helper functions to print left boundary, leaves, and right boundary
Add three functions: printLeftBoundary(Node* root), printLeaves(Node* root), and printRightBoundary(Node* root). Each function should print the node data followed by a space. printLeftBoundary should print all left boundary nodes except leaves, printLeaves should print all leaf nodes from left to right, and printRightBoundary should print all right boundary nodes except leaves in reverse order.
DSA C
Hint
Use recursion to print the left boundary by going down left children first, skipping leaves. For leaves, print nodes with no children. For right boundary, recurse first then print to get reverse order.
3
Combine functions to print the full boundary traversal
In main, after creating the tree, print the root node's data followed by a space. Then call printLeftBoundary with root->left, printLeaves with root->left and root->right, and finally printRightBoundary with root->right. This will print the boundary traversal in order.
DSA C
Hint
Start by printing the root data. Then call the three functions in order: left boundary, leaves (left and right), and right boundary.
4
Print the boundary traversal output
Run the program and observe the printed output. It should show the boundary traversal of the binary tree nodes in one line separated by spaces.
DSA C
Hint
The output should be the boundary nodes in order: root, left boundary (excluding leaves), leaves, and right boundary (excluding leaves) reversed.
Practice
(1/5)
1. What is the main purpose of the Boundary Traversal of Binary Tree?
easy
A. To print all nodes on the boundary of the tree in an anti-clockwise direction
B. To print all nodes in level order
C. To print all leaf nodes only
D. To print nodes in in-order traversal
Solution
Step 1: Understand boundary traversal definition
Boundary traversal prints nodes on the edges of the tree: left boundary, leaves, and right boundary.
Step 2: Compare with other traversals
Level order prints all nodes level-wise, leaf traversal prints only leaves, in-order prints nodes in left-root-right order.
Final Answer:
To print all nodes on the boundary of the tree in an anti-clockwise direction -> Option A
Hint: Traversal functions usually take pointer and return void [OK]
Common Mistakes:
Using struct keyword incorrectly
Passing node by value instead of pointer
Returning int instead of void
3. Consider the following binary tree:
1
/ \
2 3
/ \ \
4 5 6
/ \ / \
7 8 9 10
What is the output of the boundary traversal (anti-clockwise) of this tree?
medium
A. [1, 2, 4, 5, 7, 8, 9, 10, 6, 3]
B. [1, 2, 4, 7, 8, 9, 10, 3, 6]
C. [1, 2, 4, 7, 8, 9, 10, 6, 3]
D. [1, 2, 4, 7, 8, 5, 9, 10, 6, 3]
Solution
Step 1: Identify left boundary nodes
Left boundary excluding leaves: 1, 2
Step 2: Identify leaf nodes left to right
Leaves: 4, 7, 8, 9, 10
Step 3: Identify right boundary nodes bottom-up excluding leaves
Right boundary: 6, 3
Step 4: Combine in anti-clockwise order
Boundary traversal: 1, 2, 4, 7, 8, 9, 10, 6, 3
Final Answer:
[1, 2, 4, 7, 8, 9, 10, 6, 3] -> Option C
Quick Check:
Left boundary + leaves + right boundary = [1, 2, 4, 7, 8, 9, 10, 6, 3] [OK]
Hint: Left boundary + leaves + right boundary in order [OK]
Common Mistakes:
Including leaf nodes twice in boundary
Wrong order of right boundary nodes
Missing some leaf nodes
4. The following C code snippet is intended to print the boundary traversal of a binary tree. What is the error?
void printLeftBoundary(Node* root) {
if (root == NULL) return;
printf("%d ", root->data);
if (root->left) {
printLeftBoundary(root->left);
} else if (root->right) {
printLeftBoundary(root->right);
}
}
medium
A. It does not print the root node
B. It prints leaf nodes which should be excluded in left boundary
C. It does not handle NULL root correctly
D. It prints nodes in bottom-up order instead of top-down
Solution
Step 1: Analyze printing condition in left boundary
Function prints node data before recursive call, so top-down order is correct.
Step 2: Check if leaf nodes are excluded
The printf is before the child checks, so leaf nodes are printed before returning.
Step 3: Identify error
Leaf nodes should not be printed in left boundary function; they are printed separately in leaf traversal.
Final Answer:
It prints leaf nodes which should be excluded in left boundary -> Option B
Quick Check:
Left boundary excludes leaves [OK]
Hint: Exclude leaf nodes in left boundary function [OK]
Common Mistakes:
Printing leaf nodes in left or right boundary functions
Not checking for NULL root
Printing nodes in wrong order
5. Given a binary tree where some nodes have only one child, how should the boundary traversal be adapted to correctly include all boundary nodes without duplicates? Choose the best approach.
hard
A. Traverse all nodes in level order and print only those with one child
B. Traverse left and right boundaries including leaves, then print all leaves
C. Print all nodes in in-order traversal and remove duplicates afterwards
D. Traverse left boundary top-down excluding leaves, then all leaves left to right, then right boundary bottom-up excluding leaves, skipping duplicates
Solution
Step 1: Understand boundary traversal with single-child nodes
Nodes with one child may appear in left or right boundary or as leaves.
Step 2: Avoid duplicates by excluding leaves in boundary traversals
Left and right boundary traversals exclude leaves to avoid duplicates; leaves are printed separately.
Step 3: Combine traversals carefully
Traverse left boundary top-down excluding leaves, then leaves left to right, then right boundary bottom-up excluding leaves, skipping duplicates.
Final Answer:
Traverse left boundary top-down excluding leaves, then all leaves left to right, then right boundary bottom-up excluding leaves, skipping duplicates -> Option D
Quick Check:
Exclude leaves in boundaries, print leaves separately [OK]
Hint: Exclude leaves in boundaries, print leaves separately [OK]
Common Mistakes:
Including leaves in both boundary and leaf traversals causing duplicates
Ignoring nodes with single child in boundary
Printing nodes in wrong order
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.