Consider the below image
You need to print the leaf node:
Form left to right: 7, 15, 18, 30
Form right to left : 30, 18, 15, 7
Solution in C++
#include <iostream>
#include <queue>
#include <stack>
using namespace std;
// structure to hold binary tree node
struct Node
{
int data;
Node *left, *right;
Node(int data)
{
this->data = data;
this->left = this->right = nullptr;
}
};
void print_right_to_left_leaf(Node* node)
{
if (!node)
return;
if (!node->left && !node->right)
{
cout << node->data << " ";
return;
}
if (node->right)
print_right_to_left_leaf(node->right);
if (node->left)
print_right_to_left_leaf(node->left);
}
void print_left_to_right_leaf(Node *node)
{
if (!node)
return;
if (!node->left && !node->right)
{
cout << node->data << " ";
return;
}
if (node->left)
print_left_to_right_leaf(node->left);
if (node->right)
print_left_to_right_leaf(node->right);
}
int main()
{
Node* root = nullptr;
/* Binary tree:
16
/ \
/ \
10 25
/ \ / \
/ \ / \
7 15 18 30
*/
root = new Node(16);
root->left = new Node(10);
root->right = new Node(25);
root->left->left = new Node(7);
root->left->right = new Node(15);
root->right->left = new Node(18);
root->right->right = new Node(30);
cout<<"Printing leaf node from left to right \n";
print_left_to_right_leaf(root);
cout<<endl;
cout<<"Printing leaf node from right to left \n";
print_right_to_left_leaf(root);
cout<<endl;
return 0;
}
Output:
Printing leaf node from left to right
7 15 18 30
Printing leaf node from right to left
30 18 15 7