×

Strictly binary tree in Data Structures?

What is a strictly Binary Tree in Data Structures?

There are various kinds of binary trees that we know exist in data structures, and they all have their purposes. In this article, we are going to talk about a specific binary tree named a strictly binary tree. It is the one in which every node present in the tree either contains two nodes or doesn’t have any node at all. They are also popularly known as the full binary tree. In more technical terms, a strictly binary tree which is also known as a full binary tree, tends to be the kind of tree in which all the nodes have their own offspring or children except the leaf nodes.

Here is a strictly binary tree:

How to discover a strictly binary tree?

To find out whether the given binary tree is strictly or not, we have to first check that it must follow all of this properly. The conditions are: -

  1. If we are given a binary tree whose both the subtrees that are left and right are vacant or clear, then there are high chances of it being a strictly binary tree.
  1. If we have a tree whose node is NULL, then it is a strictly binary tree.
  1. If we have a binary tree that already consists of left and right subtrees, then from the definition, we know that it is a strictly binary tree.
  1. In any other way of arrangement of left and right subtrees, it is not a strictly binary tree.

Strictly binary tree theorem: -

Let us suppose that we have a binary tree named M, which is a non-empty tree then: -

  • Let I be the nodes that are present inside, and L be the leaf nodes that are present in a tree. Then the total number of leaf nodes that are present within a tree can be calculated by: -
    L = I + 1
  • Let us suppose that the tree has M name and if the tree named M has a total number of internal nodes named I and the total number of nodes that are present is to be named N, then the total number of nodes that are present: -
    N = 2I + 1
  • If the tree M has N number of total nodes and I number of internal nodes, then the number of internal nodes that are present in the tree would be calculated by: -
    I = (N – 2)/ 2
  • If we have a tree named M that has a total number of leaf node L and a total number of node N, then the total number of leaf nodes present in the tree will be: -
    L = (N + 1)/ 2
  • If the tree named M has N number of total nodes present within it, then the total number of leaf nodes can be calculated by the given formula: -
    N = 2L – 1
  • If the tree named M has L amount of leaf nodes and I is to be the total number of internal nodes that tree is having, then the total number of internal nodes can be calculated by the given formula: - I = L – 1

Implementation

// Checking if a binary tree is a strictly binary tree in C++


#include <iostream>
using namespace std;


struct Node {
  int key;
  struct Node *left, *right;
};


// New node creation
struct Node *newNode(char k) {
  struct Node *node = (struct Node *)malloc(sizeof(struct Node));
  node->key = k;
  node->right = node->left = NULL;
  return node;
}


bool isStrictlyBinaryTree(struct Node *root) {
  
  // Checking for emptiness
  if (root == NULL)
    return true;


  // Checking for the presence of children
  if (root->left == NULL && root->right == NULL)
    return true;


  if ((root->left) && (root->right))
    return (isStrictlyBinaryTree(root->left) && isStrictlyBinaryTree(root->right));


  return false;
}


int main() {
  struct Node *root = NULL;
  root = newNode(1);
  root->left = newNode(2);
  root->right = newNode(3);
 
root->left->left = newNode(4);
 
root->left->right = newNode(5);
 
root->left->right->left = newNode(6);
 
root->left->right->right = newNode(7);


  if (isStrictlyBinaryTree(root))
    cout << "The tree is a strictly binary tree\n";
  else
    cout << "The tree is not a strictly binary tree\n";
}

Output:

Strictly Binary Tree

Complexity

In this section, we know about the time and auxiliary space complexity of the strictly binary tree. The time complexity for this kind of tree turns out to be big O of n, which is usually written as O(n), and also the auxiliary space for this kind of tree also turns out to be O(n).


Related Topics

Given a Binary Tree, Print the Pre-order Traversal in Recursive

Implementation #include <stdio.h> #include <stdlib.h>   /* Creating a binary tree node that consists of some data along with the pointer to the left and right child.  */ struct __nod {     int record;     struct...

4 minutes read.

Linear vs Circular Queue: Data Structure

Difference Between Linear and Circular Queue What is Linear Queue? A linear queue is linear data structure which works on first in first out principle. We can say a linear queue is...

3 minutes read.

Linear Queue VS Circular Queue

What is Queue? A queue is one of the important linear data structures extensively used in various computer applications. It is based on the FIFO (First In First Out) principle. It...

9 minutes read.

Inorder Successor in Binary Trees

The next node in the Inorder traversal of a binary tree is known as Inorder successor of that particular node. In a Binary Search Tree, the definition of Inorder successor can...

9 minutes read.

Asymptotic Notation

Asymptotic notation is expressions that are used to represent the complexity of algorithms. The complexity of the algorithm is analyzed from two perspectives:  Time complexitySpace complexity Time complexity The time complexity of an algorithm is the...

3 minutes read.

Why is Binary Heap Preferred over BST for Priority Queue

A priority queue is a linear and ordered collection of elements in which each element has an attribute named priority and the priority attribute decides the order in which elements...

2 minutes read.

Write Main Difference Between Tree and Graph in Data Structures

Graph: The graph has two sets, which are considered V and E. These vertices are also called nodes, and edges are referred to as arcs connecting any two nodes in a...

4 minutes read.

Graph Data Structure

A graph is a non-primitive and non-linear data structure. It is a group of (V, E) where V is a set of vertexes, and E is a set of edge....

3 minutes read.

Finding the Minimum and Maximum Value of a Binary Tree

Implementation // Writing a C++ program that will help us find out the maximum and the minimum in a binary tree.  #include <bits/stdc++.h> #include <iostream> using namespace std; // creating a new class tree node. class...

5 minutes read.

Bubble Sort vs Merge Sort

In this article, we are going to compare two sorting techniques, Bubble sort and Merge Sort. In starting, we will first discuss the idea of sorting an array using bubble...

7 minutes read.

Bubble Sort vs Selection Sort

In this article, we will discuss the basic differences between these two sorting algorithms. Let us have a quick overview of what these sorting algorithms are? And what are the...

6 minutes read.

Stack vs Heap Memory Allocation Data Structure

Difference Between Stack and Heap Memory Allocation Stack Memory Stack memory allocation is a way to use the system memory as a temporary storage of the data which is act like last-in-first-out...

3 minutes read.

Heap Data Structure

In this article, we will learn in detail about Heap (Min heap and Max heap). Before going to the main topics, let’s have a look at what is complete binary...

19 minutes read.

Given a Generate all Structurally Unique Binary Search Trees

Implementation // Creating a C++ program that will help us build all the binary search trees for the keys from 1 to n.  #include <bits/stdc++.h> using namespace std; // creating a structure that will...

8 minutes read.

Detect and Remove Loop in a Linked List

Create a function called detectAndRemovetheLoop() that verifies whether a given Linked List has a loop, eliminates the loop if it does, and returns true if it does. It returns false...

6 minutes read.

Merge Conflicts and ways to handle them

Merge Conflicts Whenever dealing with the Git merge operations, conflicts will be the frequently occurred. When more than two developers work on the same file on different systems using Git, they...

4 minutes read.

Data Structures Algorithms

What is an Algorithm? An algorithm is a sequence of steps used to complete a job or get a desired result. It is similar to programming building elements that let cell...

4 minutes read.

What is the Use of Segment Trees in Data Structure?

Segment trees Segment trees are also called statistical trees in computer science. They are a type of tree data structure. Segment trees are used to store information regarding segments and intervals....

6 minutes read.

Insertion in B+ Tree

We will learn how to insert a node in the B+ tree and what are the different properties we are going to follow. Except for the root node, every node should...

5 minutes read.

What is the difference between Tree and Graph

We usually use a diverse range of data structure to store our data and information. To store them in a more sequential manner and to access them easily, we use...

4 minutes read.