Algorithm
Problem Name: 30 days of code -
Objective
Today, we're working with Binary Search Trees (BSTs). Check out the Tutorial tab for learning materials and an instructional video!
Task
The height of a binary search tree is the number of edges between the tree's root and its furthest leaf. You are given a pointer, root, pointing to the root of a binary search tree. Complete the getHeight function provided in your editor so that it returns the height of the binary search tree.
Input Format
The locked stub code in your editor reads the following inputs and assembles them into a binary search tree:
The first line contains an integer, n, denoting the number of nodes in the tree.
Each of the n subsequent lines contains an integer, data, denoting the value of an element that must be added to the BST.
Output Format
The locked stub code in your editor will print the integer returned by your getHeight function denoting the height of the BST.
Sample Input
7
3
5
2
1
4
6
7
Sample Output
3
Explanation
The input forms the following BST:
The longest root-to-leaf path is shown below:
There are 4 nodes in this path that are connected by 3 edges, meaning our BST's height = 3. Thus, we print 3 as our answer.
Code Examples
#1 Code Example with C Programming
Code -
C Programming
#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
struct Node* left;
struct Node* right;
int data;
}Node;
Node* newNode(int data){
Node* node=(Node*)malloc(sizeof(Node));
node->left=node->right=NULL;
node->data=data;
return node;
}
int getHeight(Node* root){
if(!root) {
return -1;
}
int lheight = getHeight(root->left);
int rheight = getHeight(root->right);
return (lheight > rheight ? lheight : rheight) + 1;
}
Node* insert(Node* root,int data){
if(root==NULL)
return newNode(data);
else{
Node* cur;
if(data < =root->data){
cur=insert(root->left,data);
root->left=cur;
}
else{
cur=insert(root->right,data);
root->right=cur;
}
}
return root;
}
int main(){
Node* root=NULL;
int T,data;
scanf("%d",&T);
while(T-->0){
scanf("%d",&data);
root=insert(root,data);
}
int height=getHeight(root);
printf("%d",height);
return 0;
}
Copy The Code &
Try With Live Editor
#2 Code Example with C++ Programming
Code -
C++ Programming
#include <cmath>
#include <iostream>
using namespace std;
class Node {
public:
int data;
Node *left;
Node *right;
Node(int d) {
data = d;
left = NULL;
right = NULL;
}
};
class Solution {
public:
Node *insert(Node *root, int data) {
if (root == NULL) {
return new Node(data);
} else {
Node *cur;
if (data < = root->data) {
cur = insert(root->left, data);
root->left = cur;
} else {
cur = insert(root->right, data);
root->right = cur;
}
return root;
}
}
int getHeight(Node *root) {
return root == NULL ? -1 : 1 + max(getHeight(root->left), getHeight(root->right));
}
};
int main() {
Solution myTree;
Node *root = NULL;
int t;
int data;
cin >> t;
while (t-- > 0) {
cin >> data;
root = myTree.insert(root, data);
}
int height = myTree.getHeight(root);
cout << height;
return 0;
}
Copy The Code &
Try With Live Editor
#3 Code Example with C# Programming
Code -
C# Programming
using System;
class Node{
public Node left,right;
public int data;
public Node(int data){
this.data=data;
left=right=null;
}
}
class Solution{
static int getHeight(Node root){
//Write your code here
return root == null ? -1 : 1 + Math.Max(getHeight(root.left), getHeight(root.right));
}
static Node insert(Node root, int data){
if(root==null){
return new Node(data);
}
else{
Node cur;
if(data<=root.data){
cur=insert(root.left,data);
root.left=cur;
}
else{
cur=insert(root.right,data);
root.right=cur;
}
return root;
}
}
static void Main(String[] args){
Node root=null;
int T=Int32.Parse(Console.ReadLine()>;
while(T-->0){
int data=Int32.Parse(Console.ReadLine());
root=insert(root,data);
}
int height=getHeight(root);
Console.WriteLine(height);
}
}
Copy The Code &
Try With Live Editor
#4 Code Example with Java Programming
Code -
Java Programming
import java.util.Scanner;
class Node {
Node left, right;
int data;
Node(int data) {
this.data = data;
left = right = null;
}
}
class Solution {
public static int getHeight(Node root) {
return root == null ? -1 : 1 + Math.max(getHeight(root.left), getHeight(root.right));
}
public static Node insert(Node root, int data) {
if (root == null) {
return new Node(data);
} else {
Node cur;
if (data < = root.data) {
cur = insert(root.left, data);
root.left = cur;
} else {
cur = insert(root.right, data);
root.right = cur;
}
return root;
}
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
Node root = null;
while (T-- > 0) {
int data = sc.nextInt();
root = insert(root, data);
}
int height = getHeight(root);
System.out.println(height);
}
}
Copy The Code &
Try With Live Editor
#5 Code Example with Javascript Programming
Code -
Javascript Programming
// Start of function Node
function Node(data) {
this.data = data;
this.left = null;
this.right = null;
}; // End of function Node
// Start of function BinarySearchTree
function BinarySearchTree() {
this.insert = function(root, data) {
if (root === null) {
this.root = new Node(data);
return this.root;
}
if (data < = root.data) {
if (root.left) {
this.insert(root.left, data);
} else {
root.left = new Node(data);
}
} else {
if (root.right) {
this.insert(root.right, data);
} else {
root.right = new Node(data);
}
}
return this.root;
};
// Start of function getHeight
this.getHeight = function(root) {
// Add your code here
if (!root) {
return -1;
}
const leftDepth = this.getHeight(root.left);
const rightDepth = this.getHeight(root.right);
// Max depth + 1 to include furthest leaf
return Math.max(leftDepth, rightDepth) + 1;
}; // End of function getHeight
}; // End of function BinarySearchTree
process.stdin.resume();
process.stdin.setEncoding('ascii');
var _input = "";
process.stdin.on('data', function (data) {
_input += data;
});
process.stdin.on('end', function () {
var tree = new BinarySearchTree();
var root = null;
var values = _input.split('\n').map(Number);
for (var i = 1; i < values.length; i++) {
root = tree.insert(root, values[i]);
}
console.log(tree.getHeight(root));
});
Copy The Code &
Try With Live Editor
#6 Code Example with Python Programming
Code -
Python Programming
class Node:
def __init__(self,data):
self.right=self.left=None
self.data = data
class Solution:
def insert(self,root,data):
if root==None:
return Node(data)
else:
if data<=root.data:
cur=self.insert(root.left,data)
root.left=cur
else:
cur=self.insert(root.right,data)
root.right=cur
return root
def getHeight(self,root):
#Write your code here
return -1 if root is None else 1 + max(self.getHeight(root.left), self.getHeight(root.right))
T=int(input())
myTree=Solution()
root=None
for i in range(T):
data=int(input())
root=myTree.insert(root,data)
height=myTree.getHeight(root)
print(height)
Copy The Code &
Try With Live Editor
#7 Code Example with PHP Programming
Code -
PHP Programming
left=$this->right=null;
$this->data = $data;
}
}
class Solution{
public function insert($root,$data){
if($root==null){
return new Node($data);
}
else{
if($data < =$root->data){
$cur=$this->insert($root->left,$data);
$root->left=$cur;
}
else{
$cur=$this->insert($root->right,$data);
$root->right=$cur;
}
return $root;
}
}
public function getHeight($root){
//Write your code here
if ($root === null) {
return -1;
}
$leftHeight = $this->getHeight($root->left);
$rightHeight = $this->getHeight($root->right);
if ($leftHeight > $rightHeight) {
$maxHeight = ++$leftHeight;
} else {
$maxHeight = ++$rightHeight;
}
return $maxHeight;
}
}//End of Solution
$myTree=new Solution();
$root=null;
$T=intval(fgets(STDIN));
while($T-->0){
$data=intval(fgets(STDIN));
$root=$myTree->insert($root,$data);
}
$height=$myTree->getHeight($root);
echo $height;
?>
Copy The Code &
Try With Live Editor