×

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 tree. 
#include <bits/stdc++.h>
using namespace std;


// A binary tree node generally consists of data, a pointer to the left and right child, and, specifically, a pointer to the right child. 
struct __nod {
	int record;
	struct __nod *Lft, *Rt;
};


// now, we are creating a function that will create a new node for the tree and return the pointer. 
struct __nod* new__nod(int record);


// this will return the maximum of the two integers.
int max(int a, int b) { return (a > b) ? a : b; }


// now, we will create a function to calculate the tree's height.
int height(struct __nod* __nod);


// it will now give us the diameter of the given binary tree.
int diameter(struct __nod* tree)
{
	// the basic case where the tree is generally empty.
	if (tree == NILL)
		return 0;


	// we can easily get the heights of the left and right subtree.
	int l__height = height(tree->Lft);
	int r__height = height(tree->Rt);


	// collect the diameter of the left and right subtrees.
	int l__diameter = diameter(tree->Lft);
	int r__diameter = diameter(tree->Rt);


	// We have to return the maximum of the following: -
	// 1) diameter of the left and right subtrees.
	// 2) height of the left and right subtrees, and then we have to add one.
	return max(l__height + r__height + 1,
			max(ldiameter, rdiameter));
}


// UTILITY FUNCTIONS TO TEST diameter() FUNCTION


// the function that we are generating will give us the height of the binary tree, and the height is generally given by the total number of nodes that are present in the longest path from the root. The node will be from the farthest possible leaf node.
int height(struct __nod* __nod)
{
	if (__nod == NILL)
		return 0;


	// In case there's a possibility that the tree is not empty, then the height of the tree will be equal to the 1 + maximum of the left height and right height of the trees
	return 1 + max(height(__nod->Lft), height(__nod->Rt));
}


// the helper function will help us by giving us the main record and null the given pointers present at the left and right positions.
struct __nod* new__nod(int record)
{
	struct __nod* __nod
		= (struct __nod*)malloc(sizeof(struct __nod));
	__nod->record = record;
	__nod->Lft = NILL;
	__nod->Rt = NILL;


	return (__nod);
}


// Writing the main code.
int main()
{


	/* Constructed binary tree is
			1
			/ \
		2	 3
		/ \
	4	 5
	*/
	struct __nod* root = new__nod(1);
	root->Lft = new__nod(2);
	root->Rt = new__nod(3);
	root->Lft->Lft = new__nod(4);
	root->Lft->Rt = new__nod(5);


	// Function Call
	cout << "Diameter of the given binary tree is " <<
		diameter(root);


	return 0;
}

Output:

Diameter of a Binary Tree

Example 2)

// Creating a recursive and challenging C# program that will help us determine the diameter of a binary tree. 
using System;
using System.Collections.Generic;


// creating a brand-new class that will contain the current left and right pointers and the current key value of the node.
class __nod
{
	public int record;
	public __nod Lft, Rt;


	public __nod(int item)
	{
		record = item;
		Lft = Rt = NILL;
	}
}


// creating a utility class will help us calculate the object's height.
class Height {
	public int h;
}


// now printing the class, which will print the diameter.
class BinaryTree {
	public __nod root;


	// define height =0 globally and call
	// diameterOpt(root,height) from main
	public int diameterOpt(__nod root, Height height)
	{
		// __lh --> Height of left subtree
		// __rh --> Height of right subtree
		Height __lh = new Height(), __rh = new Height();


		if (root == NILL) {
			height.h = 0;
			return 0; 
		}


		// l__diameter --> diameter of Left subtree
		// r__diameter --> Diameter of right subtree
		// Get the heights of left and right subtrees in __lh
		/*and __rh And store the returned values in ldiameter
				and l__diameter */
		int l__diameter = diameterOpt(root.Lft, __lh);
		int r__diameter = diameterOpt(root.Rt, __rh);


		// Height of current __nod is the max of heights of Lft
		// and Rt subtrees plus 1
		height.h = Math.Max(__lh.h, __rh.h) + 1;


		return Math.Max(__lh.h + __rh.h + 1,
						Math.Max(ldiameter, rdiameter));
	}


	// A wrapper over diameter(__nod root)
	public int diameter()
	{
		Height height = new Height();
		return diameterOpt(root, height);
	}


	// The function Compute the "height" of a tree. Height
	// is
	// the function that we are generating will give us the height of the binary tree, and the height is generally given by the total number of nodes that are present in the longest path from the root. The node will be from the farthest possible leaf node.
	public int height(__nod __nod)
	{
		// the basic case where the tree is generally empty.
		if (__nod == NILL)
			return 0;


		// In case there's a possibility that the tree is not empty, then the height of the tree will be equal to the 1 + maximum of the left height and right height of the trees
		return (1
				+ Math.Max(height(__nod.Lft),
						height(__nod.Rt)));
	}


	// writing the main code
	static void Main()
	{
		BinaryTree tree = new BinaryTree();
		tree.root = new __nod(1);
		tree.root.Lft = new __nod(2);
		tree.root.Rt = new __nod(3);
		tree.root.Lft.Lft = new __nod(4);
		tree.root.Lft.Rt = new __nod(5);


		// Function Call
		Console.Write("The diameter of given binary tree is : " + tree.diameter());
	}
}

Output:

Diameter of a Binary Tree

Related Topics

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.

Queue Data Structure

Queue in DS: The queue is a non-primitive and linear data structure. It works on the principle of FIFO (First In First Out). That is, the element that is added...

4 minutes read.

Function to Delete a Leaf Node from a Binary Tree

Implementation // We are writing a C++ code to eliminate all the leaves from the given value.  #include <bits/stdc++.h> using namespace std; // creating a new binary tree node struct __nod { int record; struct __nod *Lft,...

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

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.

Find Bridges in a Graph

You have been given a graph. You have to find out the bridges in that graph. Graph may be connected or disconnected. You have to print vertices of particular edge...

4 minutes read.

2-3 Trees and Basic Operations on them

2-3 Trees, like any other AVL trees or B-trees, are just a type of Height Balanced Tree. 2-3 Trees are the B-trees of order 3. Like every other B-tree, the...

4 minutes read.

Deletion in Binary Search Tree

Implementation #include <iostream> using namespace std; struct _nod {   int ky;   struct _nod *Lft, *Rt; }; // Creating a node in the binary tree. struct _nod *nw_nod(int Itm) {   struct _nod *temp = (struct _nod *)malloc(sizeof(struct...

4 minutes read.

Sorting Algorithms in Data Structures

A sorting algorithm is used to organize the elements of an array or list. Sorting an array, for example. Unsorted array 572941 Sorted array 124579 We're sorting the array in ascending order right now. This procedure...

4 minutes read.

Sort the linked list of 0s, 1s and 2s

Sort the linked list of 0s, 1s and 2s In this, we are given a linked list of 0s, 1s, and 2s, and we need to sort it. Examples: Input: 1  ->  1 ...

2 minutes read.

Complete Binary tree

In this article, we will discuss the complete binary tree. But before start discussing the complete binary tree, we should first see a brief description of a binary tree. What is...

7 minutes read.

What are Forest Trees in Data Structure

Data structure A data model manages and optimizes computer resources, and a database stores and manages data. It's one of many uses for data structures to hold data. Data structures come...

5 minutes read.

B Tree vs B + Tree: Data Structure

Difference Between B Tree and B+ Tree What is B Tree? B-Tree is a self-balancing or special type of m-way tree. B-Trees are used mainly in disc access. If we want...

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.

Insertion Sort in Data Structures

Insertion Sort in C++ Insertion sort is a sorting algorithm that, in each iteration, installs an unsorted element in its proper position Insertion sort operates in a similar way to how we...

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.

Data Structure Infix to Prefix Conversion

Infix to Prefix Conversion In present time, we use the infix expression in our daily life but the computers are not able to understand this format because they need to keep...

4 minutes read.

Find the fractional (n/kth) node in the linked list

Find the fractional (n/kth) node in the linked list In this problem, we have given a singly linked list and a number k. Here we need to find the (n/k)th element...

2 minutes read.

Implementation of Queue

Implementation of queue: We can implement the queue through the array and linked list. An array is the easiest way to implement the queue. When a queue is created with the...

7 minutes read.

Treap data structure

In this article, we will discuss the treap data structure. The word treap is a combination of 'tree' and 'heap'. So, treap data structure is a combination of a heap...

8 minutes read.