// Recursive C program to find leaf
// nodes from given preorder traversal
#include <stdio.h>
#include <limits.h>
// Print the leaf node from
// the given preorder of BST.
int isLeaf(int pre[], int *i, int n, int min, int max) {
// If all elements are checked return
if (*i >= n)
return 0;
// Check if node is leaf or not
if (pre[*i] > min && pre[*i] < max) {
(*i)++;
// Left and right node status, if both are false
// then current node is leaf node
int left = isLeaf(pre, i, n, min, pre[*i - 1]);
int right = isLeaf(pre, i, n, pre[*i - 1], max);
// if no node found at left and right side print data
if (!left && !right)
printf("%d ", pre[*i - 1]);
return 1;
}
return 0;
}
// Function to print all leaves
void printLeaves(int preorder[], int n) {
int i = 0;
isLeaf(preorder, &i, n, INT_MIN, INT_MAX);
}
int main() {
int n = 5;
// Array representation of below BST
// 10
// / \
// 6 13
// / \
// 2 7
int preorder[] = {10, 6, 2, 7, 13};
printLeaves(preorder, n);
return 0;
}