Check whether a binary tree is a full binary tree or not - GeeksforGeeks

20 Jan, 2022
A full binary tree is defined as a binary tree in which all nodes have either zero or two child nodes. Conversely, there is no node in a full binary tree, which has one child node. More information about full binary trees can be found here.
For Example :  
To check whether a binary tree is a full binary tree we need to test the following cases:-1) If a binary tree node is NULL then it is a full binary tree. 2) If a binary tree node does have empty left and right sub-trees, then it is a full binary tree by definition. 3) If a binary tree node has left and right sub-trees, then it is a part of a full binary tree by definition. In this case recursively check if the left and right sub-trees are also binary trees themselves. 4) In all other combinations of right and left sub-trees, the binary tree is not a full binary tree.
Following is the implementation for checking if a binary tree is a full binary tree. 
C++
C
Java
Python3
C#
Javascript
// C++ program to check whether a given Binary Tree is full or not#include <bits/stdc++.h> using namespace std;  /*  Tree node structure */struct Node{    int key;    struct Node *left, *right;};  /* Helper function that allocates a new node with the   given key and NULL left and right pointer. */struct Node *newNode(char k){    struct Node *node = new  Node;    node->key = k;    node->right = node->left = NULL;    return node;}  /* This function tests if a binary tree is a full binary tree. */bool isFullTree (struct Node* root){    // If empty tree    if (root == NULL)        return true;      // If leaf node    if (root->left == NULL && root->right == NULL)        return true;      // If both left and right are not NULL, and left & right subtrees    // are full    if ((root->left) && (root->right))        return (isFullTree(root->left) && isFullTree(root->right));      // We reach here when none of the above if conditions work    return false;}  // Driver Programint main(){    struct Node* root = NULL;    root = newNode(10);    root->left = newNode(20);    root->right = newNode(30);      root->left->right = newNode(40);    root->left->left = newNode(50);    root->right->left = newNode(60);    root->right->right = newNode(70);      root->left->left->left = newNode(80);    root->left->left->right = newNode(90);    root->left->right->left = newNode(80);    root->left->right->right = newNode(90);    root->right->left->left = newNode(80);    root->right->left->right = newNode(90);    root->right->right->left = newNode(80);    root->right->right->right = newNode(90);      if (isFullTree(root))        cout << "The Binary Tree is full\n";    else        cout << "The Binary Tree is not full\n";      return(0);} // This code is contributed by shubhamsingh10
// C program to check whether a given Binary Tree is full or not#include<stdio.h>#include<stdlib.h>#include<stdbool.h> /*  Tree node structure */struct Node{    int key;    struct Node *left, *right;}; /* Helper function that allocates a new node with the   given key and NULL left and right pointer. */struct Node *newNode(char k){    struct Node *node = (struct Node*)malloc(sizeof(struct Node));    node->key = k;    node->right = node->left = NULL;    return node;} /* This function tests if a binary tree is a full binary tree. */bool isFullTree (struct Node* root){    // If empty tree    if (root == NULL)        return true;     // If leaf node    if (root->left == NULL && root->right == NULL)        return true;     // If both left and right are not NULL, and left & right subtrees    // are full    if ((root->left) && (root->right))        return (isFullTree(root->left) && isFullTree(root->right));     // We reach here when none of the above if conditions work    return false;} // Driver Programint main(){    struct Node* root = NULL;    root = newNode(10);    root->left = newNode(20);    root->right = newNode(30);     root->left->right = newNode(40);    root->left->left = newNode(50);    root->right->left = newNode(60);    root->right->right = newNode(70);     root->left->left->left = newNode(80);    root->left->left->right = newNode(90);    root->left->right->left = newNode(80);    root->left->right->right = newNode(90);    root->right->left->left = newNode(80);    root->right->left->right = newNode(90);    root->right->right->left = newNode(80);    root->right->right->right = newNode(90);     if (isFullTree(root))        printf("The Binary Tree is full\n");    else        printf("The Binary Tree is not full\n");     return(0);}
// Java program to check if binary tree is full or not /*  Tree node structure */class Node{    int data;    Node left, right;      Node(int item)    {        data = item;        left = right = null;    }}  class BinaryTree{    Node root;          /* this function checks if a binary tree is full or not */    boolean isFullTree(Node node)    {        // if empty tree        if(node == null)        return true;                  // if leaf node        if(node.left == null && node.right == null )            return true;                  // if both left and right subtrees are not null        // the are full        if((node.left!=null) && (node.right!=null))            return (isFullTree(node.left) && isFullTree(node.right));                  // if none work        return false;    }            // Driver program    public static void main(String args[])    {        BinaryTree tree = new BinaryTree();        tree.root = new Node(10);        tree.root.left = new Node(20);        tree.root.right = new Node(30);        tree.root.left.right = new Node(40);        tree.root.left.left = new Node(50);        tree.root.right.left = new Node(60);        tree.root.left.left.left = new Node(80);        tree.root.right.right = new Node(70);        tree.root.left.left.right = new Node(90);        tree.root.left.right.left = new Node(80);        tree.root.left.right.right = new Node(90);        tree.root.right.left.left = new Node(80);        tree.root.right.left.right = new Node(90);        tree.root.right.right.left = new Node(80);        tree.root.right.right.right = new Node(90);                  if(tree.isFullTree(tree.root))            System.out.print("The binary tree is full");        else            System.out.print("The binary tree is not full");    }}  // This code is contributed by Mayank Jaiswal
# Python program to check whether given Binary tree is full or not # Tree node structureclass Node:     # Constructor of the node class for creating the node    def __init__(self , key):        self.key = key        self.left = None        self.right = None # Checks if the binary tree is full or notdef isFullTree(root):     # If empty tree    if root is None:           return True         # If leaf node    if root.left is None and root.right is None:        return True     # If both left and right subtress are not None and    # left and right subtress are full    if root.left is not None and root.right is not None:        return (isFullTree(root.left) and isFullTree(root.right))         # We reach here when none of the above if conditions work    return False # Driver Programroot = Node(10);root.left = Node(20);root.right = Node(30); root.left.right = Node(40);root.left.left = Node(50);root.right.left = Node(60);root.right.right = Node(70); root.left.left.left = Node(80);root.left.left.right = Node(90);root.left.right.left = Node(80);root.left.right.right = Node(90);root.right.left.left = Node(80);root.right.left.right = Node(90);root.right.right.left = Node(80);root.right.right.right = Node(90); if isFullTree(root):    print ("The Binary tree is full")else:    print ("Binary tree is not full") # This code is contributed by Nikhil Kumar Singh(nickzuck_007)
// C# program to check if binary tree// is full or notusing System; /* Tree node structure */public class Node{    public int data;    public Node left, right;     public Node(int item)    {        data = item;        left = right = null;    }} class GFG{public Node root; /* This function checks if a binarytree is full or not */public virtual bool isFullTree(Node node){    // if empty tree    if (node == null)    {    return true;    }     // if leaf node    if (node.left == null && node.right == null)    {        return true;    }     // if both left and right subtrees    // are not null they are full    if ((node.left != null) && (node.right != null))    {        return (isFullTree(node.left) &&                isFullTree(node.right));    }     // if none work    return false;} // Driver Codepublic static void Main(string[] args){    GFG tree = new GFG();    tree.root = new Node(10);    tree.root.left = new Node(20);    tree.root.right = new Node(30);    tree.root.left.right = new Node(40);    tree.root.left.left = new Node(50);    tree.root.right.left = new Node(60);    tree.root.left.left.left = new Node(80);    tree.root.right.right = new Node(70);    tree.root.left.left.right = new Node(90);    tree.root.left.right.left = new Node(80);    tree.root.left.right.right = new Node(90);    tree.root.right.left.left = new Node(80);    tree.root.right.left.right = new Node(90);    tree.root.right.right.left = new Node(80);    tree.root.right.right.right = new Node(90);     if (tree.isFullTree(tree.root))    {        Console.Write("The binary tree is full");    }    else    {        Console.Write("The binary tree is not full");    }}} // This code is contributed by Shrikant13
<script>// javascript program to check if binary tree is full or not /*  Tree node structure */class Node {    constructor(item) {        this.data = item;        this.left = this.right = null;    }}      var root;     /* this function checks if a binary tree is full or not */    function isFullTree( node) {        // if empty tree        if (node == null)            return true;         // if leaf node        if (node.left == null && node.right == null)            return true;         // if both left and right subtrees are not null        // the are full        if ((node.left != null) && (node.right != null))            return (isFullTree(node.left) && isFullTree(node.right));         // if none work        return false;    }     // Driver program                  root = new Node(10);        root.left = new Node(20);        root.right = new Node(30);        root.left.right = new Node(40);        root.left.left = new Node(50);        root.right.left = new Node(60);        root.left.left.left = new Node(80);        root.right.right = new Node(70);        root.left.left.right = new Node(90);        root.left.right.left = new Node(80);        root.left.right.right = new Node(90);        root.right.left.left = new Node(80);        root.right.left.right = new Node(90);        root.right.right.left = new Node(80);        root.right.right.right = new Node(90);         if(isFullTree(root))            document.write("The binary tree is full");        else            document.write("The binary tree is not full");             // This code contributed by gauravrajput1</script>
The Binary Tree is full
 
Time complexity of the above code is O(n) where n is number of nodes in given binary tree.
YouTubeGeeksforGeeks502K subscribersCheck whether a binary tree is a full binary tree or not | GeeksforGeeksWatch laterShareCopy linkInfoShoppingTap to unmuteIf playback doesn't begin shortly, try restarting your device.You're signed outVideos you watch may be added to the TV's watch history and influence TV recommendations. To avoid this, cancel and sign in to YouTube on your computer.CancelConfirmMore videosMore videosSwitch cameraShareInclude playlistAn error occurred while retrieving sharing information. Please try again later.Watch on0:000:000:00 / 4:01•Live•<div class="player-unavailable"><h1 class="message">An error occurred.</h1><div class="submessage"><a href="https://www.youtube.com/watch?v=_Hehd1KSq7Y" target="_blank">Try watching this video on www.youtube.com</a>, or enable JavaScript if it is disabled in your browser.</div></div>
This article is contributed by Gaurav Gupta. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
lostboy24
shrikanth13
SHUBHAMSINGH10
GauravRajput1
surindertarika1234
surinderdawra388
amartyaghoshgfg
Tree
Tree
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Inorder Tree Traversal without Recursion
Binary Tree | Set 3 (Types of Binary Tree)
Binary Tree | Set 2 (Properties)
Decision Tree
Complexity of different operations in Binary tree, Binary Search Tree and AVL tree
Construct Tree from given Inorder and Preorder traversals
Introduction to Tree Data Structure
Lowest Common Ancestor in a Binary Tree | Set 1
BFS vs DFS for Binary Tree
Sorted Array to Balanced BST