Rotate image (square matrix) by 90 deg
Tue, 06 May 2025
Given a Binary tree, Write code to print all the boundary nodes in counter clockwise order. For example, for the below binary tree,
The output should be: A, B, D, H, I, F, G, C, A . Boundary Nodes are traversed in anti-clockwise order.

The algorithm can be divided into three modules
Module-1: Print Nodes on Left boundary in top-down order. Module-2: Print all the leaf nodes, in left-to-right order. Module-3: Print Nodes on Right boundary in bottom-up manner.
We have to be cautious about not to print a node twice. For example, the last node in left boundary traversal ('H') will be printed by both Module-1 and Module-2. Similarly, Node 'G' will be printed by both Module-2 and Module-3.
Hence, we should print all nodes except the last (leaf node) in Module-1 and Module-3.
Let's look at the code of individual modules now.
Module-1: Printing Nodes on left boundary (from top-to-bottom).This is fairly simple. Just keep in mind that if a node does not have left child, then its right child is on the left boundary. For example, in the tree below tree
A
/ \
B C
\
D
/
E
D is on the left boundary.
/**
* Print Nodes on the left boundary in top-down manner.
* Does not print the last node because it will be printed along the leaf nodes.
*
* If a particular node does not have left child,
* then its right child will be at the left boundary.
*/
void printLeftSide(TreeNode* root)
{
if(root == NULL)
return;
while( root->lptr != NULL || root->rptr != NULL)
{
cout<<root->data<<" ";
if(root->lptr)
root = root->lptr;
else
root = root->rptr;
}
}
Module-3: Printing Nodes on right boundary (in bottom-up manner).
It make sense to write a recursive function for this, because we are printing in bottom-up and there is no link in upward direction (both lptr and rptr points downward).
/**
* Print Nodes on the Right boundary in bottom-up manner
* Does not print the last node because it will be printed along the leaf nodes.
*
* If a Node does not have right child,
* then its left child will be printed.
*/
void printRightSide(TreeNode* root)
{
if(root == NULL)
return;
if(root->lptr != NULL && root->rptr != NULL)
{
if(root->rptr)
printRightSide(root->rptr);
else
printRightSide(root->lptr);
cout<<root->data<<" ";
}
}
Module-2: Printing Leaf Nodes (left-to-right).
Print all the leaf nodes from left to right. This is simple recursive function of tree.
void printLeafs(TreeNode* root)
{
if(root == NULL )
return;
if(root->lptr == NULL && root->rptr == NULL)
{
cout<<root->data<<" ";
}
else
{
printLeafs(root->lptr);
printLeafs(root->rptr);
}
}
And finally the main callable function which connects the above three functions.
void printBorderNodes(TreeNode* root)
{
if(root->lptr)
printLeftSide(root);
printLeafs(root);
if(root->rptr)
printRightSide(root);
}
In the above function Node structure of Tree is defined as below:
struct TreeNode
{
char data;
TreeNode* lptr;
TreeNode* rptr;
};
Tue, 06 May 2025
Tue, 06 May 2025
Tue, 06 May 2025
Leave a comment