×

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

Insertion sort

Insertion sort is a simple sorting technique. It is best suited for small data sets, but it does not suitable for large data sets. In this technique, we pick an...

4 minutes read.

Pairwise swap elements of a given linked list

Pairwise swap elements of a given linked list In this problem, we have given a linked list, and we need to pairwise swap elements of the given linked list. Example:                                     Input:1 ->3...

4 minutes read.

Queue operations in Data Structure

Queue - Queue is a linear data structure or first in first out data structure means the first element added in the queue will be removed first and the last...

7 minutes read.

Binary Search Tree

Binary Search Tree: A binary search tree is a type of tree in which every node is organized in the sorted order. It is also called an ordered binary tree. Properties...

4 minutes read.

Bitonical Sort

Arranging an unordered collecttion of things into asignificant order. •Comparision Based Model: Bubble Sort, Selection Sort -->Non-Comparison Based. Model: Bucket Sort or on the other hand a Count Sort Bitonic Sort: Bitonic sort Algorithm was made...

5 minutes read.

About Data Structures

What exactly are data structures? A data structure is a type of storage that is used to organise and store data. It is a method of organising data on a computer...

5 minutes read.

Linked List Representation of Binary Tree

As we all know, a binary tree has a maximum of two children and helps us manage the info correctly. The word binary itself represents its meaning; we know that...

4 minutes read.

Given a Binary Tree Swap Nodes at K Height

Implementation // Writing a C++ program that will help us exchange the nodes.  #include<bits/stdc++.h> using namespace std; // Creating a binary tree node. struct __nod { int record; struct __nod *Lft, *Rt; }; // creating a function that will help...

8 minutes read.

B+ Tree Program in Q language

A B+ tree is just an improvised version of a self-balancing and well-maintained tree in which all the key values that hold valuable information is present at the bottom, which...

9 minutes read.

Stack vs Queue: Data Structure

 Difference Between Stack and Queue What is Stack? The LIFO principle applies on insertion and deletion operations of the stack which means last inserted element to the stack will remove first....

3 minutes read.

Rearrange a linked list into alternate fashion first and the last element

Rearrange a linked list into alternate fashion first and the last element This article will explain how to rearrange the linked list into alternate fashion first and the last element. Here,...

3 minutes read.

Lowest Common Ancestor in a Binary Tree

The lowest node in the tree that contains both n1 and n2 as descendants is the lowest common ancestor (LCA), and n1 and n2 are the nodes for which we...

11 minutes read.

Program to calculate the area of the circumcircle of an equilateral triangle

You have given one value which represents the side of the equilateral triangle. You have to find out the area of the circumcircle. Let’s take an example - For the above...

3 minutes read.

Hashing

Hashing: Hashing is a process in which a large amount of data is mapped to a small table with the help of hashing function. It is a searching technique. Hash table We...

4 minutes read.

Timsort

TimSort Time Complexity Timsort is a sorting algorithm that is quite efficient for real-world data. Timsort is created in 2001 by Tim Peters for the python programming language. Timsort is a...

3 minutes read.

Tim Sort

Tim Sort is a mixture stable arranging calculation that exploits normal examples in information, and uses a mix of an improved Merge sort and Binary Insertion sort alongside an interior...

6 minutes read.

Operations on 1D-Arrays

One Dimensional Array Operations Basic Methods The fundamental operations enabled by an array are listed below. Traverse prints each element of the array one by one.Insert a new element at the specified index.Delete...

8 minutes read.

Introduction and Implementation of Bloom Filter

It often happens with many of us that when we create an account on some applications like Github, it shows us that the username already exists. You can add some...

4 minutes read.

Serialize and Deserialize a Binary Tree

Implementation // Writing a C++ program to check the serialization and deserialization of binary tree.   #include <iosstream> /* A binary tree node contains a key and a pointer to the left and right...

4 minutes read.

Length of longest palindrome in a linked list using O(1) extra space

Length of longest palindrome in a linked list using O(1) extra space In this problem, we need to find the length of the longest palindrome list that is present in given...

2 minutes read.