Count leaf nodes in a binary tree

Mujahida Joynab - Feb 13 - - Dev Community

What is leaf node?
The node have no children .

We have to count how many leaf nodes in a tree .

We will do it by recursion . If the root is NULL that means there is no tree . So we will return 0 . If a node's left node is NULL && right node is also NULL that means it is a leaf node .

We will return l+r . We are not calculating all nodes. That's why we are not returning l+r+1 . We are only returning child node .

Let's take a new tree .

Image description

#include <bits/stdc++.h>
using namespace std;
class Node
{
public:
    int val;
    Node *right;
    Node *left;
    Node(int value)
    {
        this->val = value;
        this->right = NULL;
        this->left = NULL;
    }
};

Node *input_tree()
{
    int val;
    cin >> val;

    Node *root;

    if (val == -1)
        root = NULL;
    else
        root = new Node(val);

    queue<Node *> q;
    if (root)
        q.push(root);

    while (!q.empty())
    {

        Node *p = q.front();
        q.pop();

        Node *myLeft;
        Node *myRight;

        int l, r;
        cin >> l >> r;

        if (l == -1)
            myLeft = NULL;
        else
            myLeft = new Node(l);

        if (r == -1)
            myRight = NULL;

        else
            myRight = new Node(r);

        p->left = myLeft;
        p->right = myRight;

        if (p->left)
            q.push(p->left);

        if (p->right)

            q.push(p->right);
    }

    return root;
}

void level_order(Node *root)
{
    if (root == NULL)
    {
        cout << "Tree nai " << endl;
        return;
    }

    queue<Node *> q;
    q.push(root);

    while (!q.empty())
    {
        Node *f = q.front();
        q.pop();

        cout << f->val << " ";

        if (f->left)
            q.push(f->left);
        if (f->right)
            q.push(f->right);
    }
}

int count_leaf_node(Node *root)
{
    if (root == NULL)
        return 0 ;
    if (root->left == NULL && root->right == NULL)
        return 1;
    int l = count_leaf_node(root->left) ;
    int r = count_leaf_node(root->right) ;
    return l + r;
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    Node *root = input_tree();
    cout << count_leaf_node(root) ;
}


Enter fullscreen mode Exit fullscreen mode
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .