Palabra más larga en el árbol de búsqueda ternario

Dado un conjunto de palabras representadas en un árbol de búsqueda ternario, encuentre la longitud de la palabra más grande entre ellas.

Ejemplos: 

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

Requisito previo: árbol de búsqueda ternario
La idea es buscar recursivamente el máximo de subárbol izquierdo, subárbol derecho y árbol igual. 
Si el carácter actual es el mismo que el carácter de la raíz, incremente en 1. 

Implementación:

C

// C program to find the length of largest word
// in ternary search tree
#include <stdio.h>
#include <stdlib.h>
#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

Python3

MAX = 50
 
class Node:
 
    def __init__(self,data):
        self.left = None
        self.right = None
        self.data = data
        self.isEndOfString = 0
        self.eq = None
     
# Function to insert a word in a Ternary
# Search Tree
def insert(root, word, i):
     
    # Base Case: Tree is empty
    if (root == None):
        root = Node(word[i])
         
    # If current character of word is smaller
    # than root's character, then insert self
    # 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 self
    # word in right subtree of root
    elif (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 < len(word)):
            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
def max(a, b, c):
 
    if (a >= b and a >= c):
        Max = a
    elif (b >= a and b >= c):
        Max = b
    else:
        Max = c
    return Max
         
# Function to find length of largest word in TST
def maxLengthTST(root):
 
    if (root == None):
            return 0
    return max(maxLengthTST(root.left),
                maxLengthTST(root.eq)+1,
                maxLengthTST(root.right))
     
root = None
root = insert(root, "Prakriti", 0)
root = insert(root, "Raghav", 0)
root = insert(root, "Rashi", 0)
root = insert(root, "Sunidhi", 0)
value = maxLengthTST(root)
print("Length of largest word in ternary search tree is: "+ str(value))
 
# This code is contributed by shinjanpatra

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

<script>
    // Javascript program to find the length of largest word
    // in ternary search tree
    let MAX = 50;
     
    class Node
    {
        constructor(data) {
           this.left = null;
           this.right = null;
           this.data = data;
           this.isEndOfString = 0;
           this.eq = null;
        }
    }
     
    // Function to insert a new word in a Ternary
    // Search Tree
    function insert(root, word, 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
    function max(a, b, c)
    {
        let 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
    function maxLengthTST(root)
    {
        if (root == null)
            return 0;
        return max(maxLengthTST(root.left),
                   maxLengthTST(root.eq)+1,
                   maxLengthTST(root.right));
    }
     
    let root = null;
    root = insert(root, "Prakriti", 0);
    root = insert(root, "Raghav",  0);
    root = insert(root, "Rashi", 0);
    root = insert(root, "Sunidhi", 0);
    let value = maxLengthTST(root);
    document.write("Length of largest word in "+
                       "ternary search tree is: "+ value);
 
// This code is contributed by divyeshrabadiya07.
</script>
Producción

Length of largest word in ternary search tree is: 8

Este artículo es una contribución de Prakriti Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *