×

Binary Tree Implementation Using Arrays

Implementation

Converting a binary tree into a list of arrays is one interesting problem. Let us see that in depth.

In this section, we will see the implementation of the binary Trees while using arrays. let us proceed: -

#include<bits/stdc++.h>
using namespace std;
char T[10];
int root(char ky) {
if (T[0] != '\0')
	cout << "T already had root";
else
	T[0] = ky;
return 0;
}


int set_lft(char ky, int Parr) {
if (T[Parr] == '\0')
	cout << "\nCan't set child at "
	<< (Parr * 2) + 1
	<< " , no Parr found";
else
	T[(Parr * 2) + 1] = ky;
return 0;
}


int set_rt(char ky, int Parr) {
if (T[Parr] == '\0')
	cout << "\nCan't set child at "
	<< (Parr * 2) + 2
	<< " , no Parr found";
else
	T[(Parr * 2) + 2] = ky;
return 0;
}


int print_T() {
cout << "\n";
for (int i = 0; i < 10; i++) {
	if (T[i] != '\0')
	cout << T[i];
	else
	cout << "-";
}
return 0;
}
int main() {
root('A');
set_lft('B',0);
set_rt('C', 0);
set_lft('D', 1);
set_rt('E', 1);
set_rt('F', 2);
print_T();
return 0;
}

Output:

Binary Tree Implementation Using Arrays

Example 2)

Let's start with the step by making an array

#include <stdio.h>


/*


           D
          / \
         /   \
        /     \
       A       F
      / \     / \    
     /   \   /   \
    E     B R     T
   / \     /     / \
  G   Q   V     J   L
*/


int CO_nod = 15;


char T[] = {'\0', 'D', 'A', 'F', 'E', 'B', 'R', 'T', 'G', 'Q', '\0', '\0', 'V', '\0', 'J', 'L'};


int main()
{
    return 0;
}
int get_rt_child(int idx)
{
    if(T[idx]!='\0' && ((2*idx)+1)<=CO_nod)
        return (2*idx)+1;
    return -1;
}
/*


           D
          / \
         /   \
        /     \
       A       F
      / \     / \    
     /   \   /   \
    E     B R     T
   / \     /     / \
  G   Q   V     J   L
*/


int CO_nod = 15;


char T[] = {'\0', 'D', 'A', 'F', 'E', 'B', 'R', 'T', 'G', 'Q', '\0', '\0', 'V', '\0', 'J', 'L'};


int get_rt_child(int idx)
{
    if(T[idx]!='\0' && ((2*idx)+1)<=CO_nod)
        return (2*idx)+1;
    return -1;
}


int get__lft_child(int idx)
{
    
    if(T[idx]!='\0' && (2*idx)<=CO_nod)
        return 2*idx;
    return -1;
}


int Is__lf(int idx)
{
    if(!get__lft_child(idx) && !get__rt_child(idx))  
        return 1;
    if(T[get__lft_child(idx)]=='\0' && T[get__rt_child(idx)]=='\0')
        return 1;
    return 0; 
}


int get_high(int x, int y)
{
    return (x>y) ? x: y;
}


int get_H(int idx)
{
    if(T[idx]=='\0' || idx<=0 || Is__lf(idx))
        return 0;
    return(get_high(get_H(get__lft_child(idx)), get_H(get_rt_child(idx)))+1);
}


int main()
{
    printf("%d\n",get_H(1));
    return 0;
}

Output:

Binary Tree Implementation Using Arrays

Example 3)

#include <stdio.h>


/*


           D
          / \
         /   \
        /     \
       A       F
      / \     / \    
     /   \   /   \
    E     B R     T
   / \     /     / \
  G   Q   V     J   L
*/


int CO_nod = 15;


char T[] = {'\0', 'D', 'A', 'F', 'E', 'B', 'R', 'T', 'G', 'Q', '\0', '\0', 'V', '\0', 'J', 'L'};
//creating a function to get the parent node
int get_Parr(int idx)
{
    if(T[idx]!='\0' && idx>1 && idx<=CO_nod) 
        return idx/2;
    return -1;
}


int get__rt_child(int idx)
{
    if(T[idx]!='\0' && ((2*idx)+1)<=CO_nod)
        return (2*idx)+1;
    return -1;
}


int get__lft_child(int idx)
{
    if(T[idx]!='\0' && (2*idx)<=CO_nod)
        return 2*idx;
    return -1;
}


void pre_Ord(int idx)
{
    // checking for valid idx and NILL node
    if(idx>0 && T[idx]!='\0')
    {
        printf(" %c ",T[idx]); 
        pre_Ord(get__lft_child(idx)); 
        pre_Ord(get_rt_child(idx)); 
    }
}


void post_Ord(int idx)
{
    // checking whether the index is correct or not.
    if(idx>0 && T[idx]!='\0')
    {
        post_Ord(get__lft_child(idx)); 
        post_Ord(get_rt_child(idx)); 
        printf(" %c ",T[idx]); 
    }
}


void In_Ord(int idx)
{
    // checking whether the index is correct or not.
    if(idx>0 && T[idx]!='\0')
    {
        In_Ord(get__lft_child(idx)); 
        printf(" %c ",T[idx]); 
        In_Ord(get_rt_child(idx)); 
    }
}


int Is__lf(int idx)
{
    //verifying whether the left and right children have valid indices or not. 
    if(!get__lft_child(idx) && !get__rt_child(idx))  
        return 1;
    //verifying if both the child nodes have NILL value or not  
    if(T[get__lft_child(idx)]=='\0' && T[get_rt_child(idx)]=='\0')
        return 1;
    return 0; // node is not a leaf
}


int get_high(int x, int y)
{
    return (x>y) ? x: y;
}


int get_H(int idx)
{
    // if the node is a leaf, then the height will be 0
    // the height will be 0 also for the invalid cases
    if(T[idx]=='\0' || idx<=0 || Is__lf(idx))
        return 0;
    // height of node i is 1+ maximum among the height of left subtree and the height of right subtree
    return(get_high(get_H(get__lft_child(idx)), get_H(get_rt_child(idx)))+1);
}

Output:

Binary Tree Implementation Using Arrays

Related Topics

Deletion Operation of the binary search tree in C++ language

A typical binary search tree implements some order to carry out the arrangements. As the name suggests, each parent node should have at most two children. The main rule in...

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.

Vertical Order Traversal of Binary Tree

Implementation #include <iostream> #include <vector> #include <map> using namespace std; // representing the primary model of a binary tree node. struct _nod { int ky; _nod *Lft, *Rt; }; // establishing a new function representing the new binary tree node. struct _nod*...

5 minutes read.

Convert Sorted List to Binary Search Tree

Implementation // creating the C++ implementation of the following approach: - #include <bits/stdc++.h> using namespace std; /* Create the link list node and see its implementation. */ class L__Nod { public: int record; L__Nod* next; }; /* constructing a new binary...

15 minutes read.

Common Operations on various Data Structures

Data structures are ways to organise data in computer memory for quick and effective use. The storage of data uses a variety of data-structures. It is also possible to define...

7 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.

Insertion Sort vs Selection Sort

In this article, we will discuss insertion sort, Selection sort and the basic differences between these two sorting techniques in detail: What is Insertion Sort? Insertion Sort – The insertion sort is...

5 minutes read.

Find the nth node from the end of a Linked List

Find the nth node from the end of a Linked List In this problem, we have given a singly linked list and a number 'n,' and we need to find the...

3 minutes read.

Blowfish algorithm

The Blowfish algorithm is the very first encryption algorithm which is symmetric. It was firstly used as an alternate algorithm for the DES algorithm. It was designed by Bruce Steiner...

3 minutes read.

Diameter of a Binary Tree

Implementation We will now witness the implementation of the diameter of a binary tree. // Creating a recursive and challenging C program that will help us determine the diameter of a binary...

4 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.

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.

Threaded Binary Tree

The linked form of binary trees wastes storage capacity because more than half of the connection variables have a Missing value. A binary tree has several nodes. Hence n+1 link fields...

8 minutes read.

Deletion in B+ Tree

Make a search for the leaf node that containing the key value by taking the value in a key value. If the required key value is found, then it will remove...

6 minutes read.

Bitwise Operators and their Important Tricks

In most of the programs you write today, you deal with data types comprising bytes, such as integer, float, double, etc. Dealing with bytes? It is a quite normal task,...

5 minutes read.

Dynamic memory allocation of structure in C

We can normally store elements of the same datatype with the help of an array in C programming. We can store multiple numbers of elements of a character data type...

5 minutes read.

Boruvkas algorithm

This algorithm is used for finding minimum spanning tree from a weighted graph. Like prim’s and kruskal’s algorithm it is also a greedy algorithm. Note:What is the minimum spanning tree?We know...

4 minutes read.

All About Minimum Cost Spanning Trees in Data Structure

Data management is called database management. This allows the computer to sort or organize the data for efficient retrieval. A data model is a system that stores, manages, and optimizes...

7 minutes read.

Bubble Sort in Data Structures

Bubble Sort in C++ The bubble sort algorithm analyses two adjacent elements and swaps them until they are no longer in the desired order. Each iteration moves each member of the array...

4 minutes read.

Data Structure Prefix to Postfix Conversion

Prefix to Postfix Conversion Prefix: As the name suggests if the operator placed before the operands called the prefix expression.  The form of prefix expression is (operator, operand1, operand2). Example:  *+EF-GH (Infix:...

2 minutes read.