Related Articles

# Longest word in ternary search tree

• Difficulty Level : Medium
• Last Updated : 15 Jul, 2021

Given a set of words represented in a ternary search tree, find the length of largest word among them.
Examples:

```Input : {"Prakriti", "Raghav",
"Rashi", "Sunidhi"}
Output : Length of largest word in
ternary search tree is: 8

Input : {"Boats", "Boat", "But", "Best"}
Output : Length of largest word in
ternary search tree is: 5```

Prerequisite : Ternary Search Tree
The idea is to recursively search the max of left subtree, right subtree and equal tree.
If the current character is same as the root’s character increment with 1.

## C

 `// C program to find the length of largest word``// in ternary search tree``#include ``#include ``#define MAX 50`` ` `// A node of ternary search tree``struct` `Node``{``    ``char` `data;`` ` `    ``// True if this character is last``   ``// character of one of the words``    ``unsigned isEndOfString: 1;`` ` `    ``struct` `Node *left, *eq, *right;``};`` ` `// A utility function to create a new``// ternary search tree node``struct` `Node* newNode(``char` `data)``{``    ``struct` `Node* temp =``     ``(``struct` `Node*) ``malloc``(``sizeof``( ``struct` `Node ));``    ``temp->data = data;``    ``temp->isEndOfString = 0;``    ``temp->left = temp->eq = temp->right = NULL;``    ``return` `temp;``}`` ` `// Function to insert a new word in a Ternary``// Search Tree``void` `insert(``struct` `Node** root, ``char` `*word)``{``    ``// Base Case: Tree is empty``    ``if` `(!(*root))``        ``*root = newNode(*word);`` ` `    ``// If current character of word is smaller``    ``// than root's character, then insert this``    ``// word in left subtree of root``    ``if` `((*word) < (*root)->data)``        ``insert(&( (*root)->left ), word);`` ` `    ``// If current character of word is greater``    ``// than root's character, then insert this``    ``// word in right subtree of root``    ``else` `if` `((*word) > (*root)->data)``        ``insert(&( (*root)->right ), word);`` ` `    ``// If current character of word is same as``    ``// root's character,``    ``else``    ``{``        ``if` `(*(word+1))``            ``insert(&( (*root)->eq ), word+1);`` ` `        ``// the last character of the word``        ``else``            ``(*root)->isEndOfString = 1;``    ``}``}`  `// Function to find max of three numbers``int` `max(``int` `a, ``int` `b, ``int` `c)``{``    ``int` `max;``    ``if` `(a >= b && a >= c)``        ``max = a;``    ``else` `if` `(b >= a && b >= c)``        ``max = b;``    ``else``        ``max = c;``}` `// Function to find length of largest word in TST``int` `maxLengthTST(``struct` `Node *root)``{``    ``if` `(root == NULL)``        ``return` `0;``    ``return` `max(maxLengthTST(root->left),``               ``maxLengthTST(root->eq)+1,``               ``maxLengthTST(root->right));``}` `// Driver program to test above functions``int` `main()``{``    ``struct` `Node *root = NULL;``    ``insert(&root, ``"Prakriti"``);``    ``insert(&root, ``"Raghav"``);``    ``insert(&root, ``"Rashi"``);``    ``insert(&root, ``"Sunidhi"``);``    ``int` `value = maxLengthTST(root);``    ``printf``(``"Length of largest word in "``    ``"ternary search tree is: %d\n"``, value);`` ` `    ``return` `0;``}`

## Java

 `// Java program to find the length of largest word``// in ternary search tree``public` `class` `GFG {` `    ``static` `final` `int` `MAX = ``50``;``      ` `    ``// A node of ternary search tree``    ``static` `class` `Node``    ``{``        ``char` `data;``      ` `        ``// True if this character is last``        ``// character of one of the words``        ``int` `isEndOfString = ``1``;``      ` `        ``Node left, eq, right;``        ` `        ``// constructor``        ``Node(``char` `data)``        ``{``            ``this``.data = data;``            ``isEndOfString = ``0``;``            ``left = ``null``;``            ``eq = ``null``;``            ``right = ``null``;``        ``}``    ``}``    ` `    ``// Function to insert a new word in a Ternary``    ``// Search Tree``    ``static` `Node insert(Node root, String word, ``int` `i)``    ``{``        ``// Base Case: Tree is empty``        ``if` `(root == ``null``)``            ``root = ``new` `Node(word.charAt(i));``      ` `        ``// If current character of word is smaller``        ``// than root's character, then insert this``        ``// word in left subtree of root``        ``if` `(word.charAt(i) < root.data)``            ``root.left = insert(root.left, word, i);``      ` `        ``// If current character of word is greater``        ``// than root's character, then insert this``        ``// word in right subtree of root``        ``else` `if` `(word.charAt(i) > root.data)``            ``root.right = insert(root.right, word, i);``      ` `        ``// If current character of word is same as``        ``// root's character,``        ``else``        ``{``            ``if` `(i + ``1` `< word.length())``                ``root.eq = insert(root.eq, word, i + ``1``);``      ` `            ``// the last character of the word``            ``else``                ``root.isEndOfString = ``1``;``        ``}``        ``return` `root;``    ``}``     ` `     ` `    ``// Function to find max of three numbers``    ``static` `int` `max(``int` `a, ``int` `b, ``int` `c)``    ``{``        ``int` `max;``        ``if` `(a >= b && a >= c)``            ``max = a;``        ``else` `if` `(b >= a && b >= c)``            ``max = b;``        ``else``            ``max = c;``        ``return` `max;``    ``}``     ` `    ``// Function to find length of largest word in TST``    ``static` `int` `maxLengthTST(Node root)``    ``{``        ``if` `(root == ``null``)``            ``return` `0``;``        ``return` `max(maxLengthTST(root.left),``                   ``maxLengthTST(root.eq)+``1``,``                   ``maxLengthTST(root.right));``    ``}``     ` `    ``// Driver program to test above functions``    ``public` `static` `void` `main(String args[])``    ``{``        ``Node root = ``null``;``        ``root = insert(root, ``"Prakriti"``, ``0``);``        ``root = insert(root, ``"Raghav"``,  ``0``);``        ``root = insert(root, ``"Rashi"``, ``0``);``        ``root = insert(root, ``"Sunidhi"``, ``0``);``        ``int` `value = maxLengthTST(root);``        ``System.out.println(``"Length of largest word in "``+``        ``"ternary search tree is: "``+ value);``    ``}``}``// This code is contributed by Sumit Ghosh`

## C#

 `// C# program to find the length of largest word``// in ternary search tree``using` `System;` `class` `GFG``{` `    ``static` `readonly` `int` `MAX = 50;``        ` `    ``// A node of ternary search tree``    ``public` `class` `Node``    ``{``        ``public` `char` `data;``        ` `        ``// True if this character is last``        ``// character of one of the words``        ``public` `int` `isEndOfString = 1;``        ` `        ``public` `Node left, eq, right;``        ` `        ``// constructor``        ``public` `Node(``char` `data)``        ``{``            ``this``.data = data;``            ``isEndOfString = 0;``            ``left = ``null``;``            ``eq = ``null``;``            ``right = ``null``;``        ``}``    ``}``    ` `    ``// Function to insert a new word in a Ternary``    ``// Search Tree``    ``static` `Node insert(Node root, String word, ``int` `i)``    ``{``        ``// Base Case: Tree is empty``        ``if` `(root == ``null``)``            ``root = ``new` `Node(word[i]);``        ` `        ``// If current character of word is smaller``        ``// than root's character, then insert this``        ``// word in left subtree of root``        ``if` `(word[i] < root.data)``            ``root.left = insert(root.left, word, i);``        ` `        ``// If current character of word is greater``        ``// than root's character, then insert this``        ``// word in right subtree of root``        ``else` `if` `(word[i] > root.data)``            ``root.right = insert(root.right, word, i);``        ` `        ``// If current character of word is same as``        ``// root's character,``        ``else``        ``{``            ``if` `(i + 1 < word.Length)``                ``root.eq = insert(root.eq, word, i + 1);``        ` `            ``// the last character of the word``            ``else``                ``root.isEndOfString = 1;``        ``}``        ``return` `root;``    ``}``    ` `    ` `    ``// Function to find max of three numbers``    ``static` `int` `max(``int` `a, ``int` `b, ``int` `c)``    ``{``        ``int` `max;``        ``if` `(a >= b && a >= c)``            ``max = a;``        ``else` `if` `(b >= a && b >= c)``            ``max = b;``        ``else``            ``max = c;``        ``return` `max;``    ``}``    ` `    ``// Function to find length of largest word in TST``    ``static` `int` `maxLengthTST(Node root)``    ``{``        ``if` `(root == ``null``)``            ``return` `0;``        ``return` `max(maxLengthTST(root.left),``                ``maxLengthTST(root.eq) + 1,``                ``maxLengthTST(root.right));``    ``}``    ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``        ``Node root = ``null``;``        ``root = insert(root, ``"Prakriti"``, 0);``        ``root = insert(root, ``"Raghav"``, 0);``        ``root = insert(root, ``"Rashi"``, 0);``        ``root = insert(root, ``"Sunidhi"``, 0);``        ``int` `value = maxLengthTST(root);``        ``Console.WriteLine(``"Length of largest word in "``+``        ``"ternary search tree is: "``+ value);``    ``}``}` `/* This code contributed by PrinciRaj1992 */`

## Javascript

 ``

Output:

`Length of largest word in ternary search tree is: 8`

This article is contributed by Prakriti Gupta. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.