Table of Contents
grammar
parameter
algorithm
Example
Output
in conclusion
Home Backend Development C++ Print all possible nodes of a Trie built from the given list of strings

Print all possible nodes of a Trie built from the given list of strings

Sep 06, 2023 pm 06:01 PM
Print trie nodes

In C, trie is a high-level data structure used to store a collection of trees. The word trie comes from the word retrieval, it is called a number tree or a prefix tree.

Let’s take an example of all possible joins given a list of strings.

We define the string input as {"tutor", "true", "tuo"}

Print all possible nodes of a Trie built from the given list of strings

We can observe that different strings are concatenated with a single string. So t and u here are character lists that connect all possible strings.

In this article, we will use the trie data structure to solve all possible connections in a list of strings.

grammar

struct name_of_structure{
   data_type var_name;   // data member or field of the structure.
}
Copy after login

parameter

  • struct − This keyword is used to represent the structure data type.

  • name_of_structure − We provide any name for the structure.

  • A structure is a collection of various related variables in one place.

treetrie* alpha[alphabet]
Copy after login

alpha is the name of the variable pointing to the structure pointer/data member named treetrie. alphabet is a macro that sets the total value of characters, expressed as an integer.

algorithm

  • We first use a header file named ‘bits/stdc .h’, which contains all the standard template libraries of C.

  • We are defining two macros, 'alphabet' and 'max', which define the total number of characters in the alphabet and the maximum value of characters .

  • We are creating a structure called 'tree node' and defining a pointer to 'tree_node' to store the address of the letter. Define the variable 'end_word' using bool data type, which will be used for the end character of the string.

  • We are using a pointer to connect to a new node representing the tree built by the trie, defining a function called 'buildNode'.

  • To insert a string, we create a recursive function called 'ins_recursive_of_string' which accepts three parameters - itm, str (the string to be inserted), i (which represents the current character being processed).

  • Function ins() is defined in the code as a wrapper function for ins_recursive_of_str(). It accepts two parameters: tree_trie* itm (a tree_trie object) and string str (the string to be inserted). It calls the recursive function using the current node, the string to be inserted, and the starting index 0.

  • Next, we are creating a function called LeafNode() which accepts a tree_trie object as a parameter and checks if it is a leaf node, i.e. if it has no child nodes.

  • Functiondisplay_joint() is defined in the code and accepts four parameters: tree_trie* root, tree_trie* itm (the node currently being processed), char str[] (a character array str, used to store the path string formed from the root node to the current node), and an int level (an integer level representing the depth of the current node).

  • This code defines the displayJ() function, which is the wrapper function of display_joint(). It accepts a tree_trie object as a parameter and calls the display_joint() function with the root node, an empty character array, and a starting level of 0 as parameters.

  • This code defines the main() function, which generates a new tree_trie object as the Trie root node. It generates a vector s containing a list of strings to be inserted into the Trie. Then, it calls the ins() function to insert each string into the Trie.

  • Finally, it prints a message to indicate the start of output and calls the displayJ() function to display all Trie connection points.

Example

In this program, we will print all possible join points of a trie built from a given list of strings.

#include <bits/stdc++.h>
using namespace std;
#define alphabet 26
#define max 200

// creating a structure for trie node
struct tree_trie {
   tree_trie* alpha[alphabet];
   bool end_word;
};
tree_trie* buildNode(){
   tree_trie* temp = new tree_trie();
   temp->end_word = false;
   for (int i = 0; i < alphabet; i++) {
      temp->alpha[i] = NULL;
   }
   return temp;
}

// We will insert the string using trie recursively
void ins_recursive_of_str(tree_trie* itm,
string str, int i){
   if (i < str.length()) {
      int idx = str[i] - 'a';
      if (itm->alpha[idx] == NULL) {
         // We are creating a new node
         itm->alpha[idx] = buildNode();
      }
      // calling recursion function for inserting a string
      ins_recursive_of_str(itm->alpha[idx],
      str, i + 1);
   }
   else {
      // We make the end_word true which represents the end of string
      itm->end_word = true;
   }
}

// By using function call we are inserting a tree
void ins(tree_trie* itm, string str){

   // The necessary argument required for function call
   ins_recursive_of_str(itm, str, 0);
}

// Using function we check whether the node is a leaf or not
bool isLeafNode(tree_trie* root){
   return root->end_word != false;
}

// This function is an important part of the program to display the joints of trie
void display_joint(tree_trie* root, tree_trie* itm,
char str[], int level){

   //Using this variable we are counting the current child
   int current_alpha = 0;
   for (int i = 0; i < alphabet; i++){
      if (itm->alpha[i]) {
         str[level] = i + 'a';
         display_joint(root, itm->alpha[i],
         str, level + 1);
         current_alpha++;
      }
   }
   
   // We are printing the character if it has more than 1 character
   if (current_alpha > 1 && itm != root) {
      cout << str[level - 1] << endl;
   }
}

// By using this function call we are diplaying the joint of trie.
void displayJ(tree_trie* root){
   int level = 0;
   char str[max];
   display_joint(root, root, str, level);
}

// main function 
int main(){
   tree_trie* root = buildNode();
   vector<string> s = { "tutor", "true", "tuo"};

   for (string str : s) {
      ins(root, str);
   }
   cout<<"All possible joint of trie using the given list of string"<<endl;
   displayJ(root);
   return 0;
}
Copy after login

Output

All possible joint of trie using the given list of string
u
t
Copy after login

in conclusion

We explored the concept of a trie data structure, where we built all possible trie join points from a given list of strings. We see in the output that the characters u and t connect all possible join points of the trie by using strings like tutor, true and tuo. Therefore, a tree can reduce its nodes by giving possible connection points.

The above is the detailed content of Print all possible nodes of a Trie built from the given list of strings. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

Java Tutorial
1655
14
PHP Tutorial
1252
29
C# Tutorial
1226
24
C language data structure: data representation and operation of trees and graphs C language data structure: data representation and operation of trees and graphs Apr 04, 2025 am 11:18 AM

C language data structure: The data representation of the tree and graph is a hierarchical data structure consisting of nodes. Each node contains a data element and a pointer to its child nodes. The binary tree is a special type of tree. Each node has at most two child nodes. The data represents structTreeNode{intdata;structTreeNode*left;structTreeNode*right;}; Operation creates a tree traversal tree (predecision, in-order, and later order) search tree insertion node deletes node graph is a collection of data structures, where elements are vertices, and they can be connected together through edges with right or unrighted data representing neighbors.

The truth behind the C language file operation problem The truth behind the C language file operation problem Apr 04, 2025 am 11:24 AM

The truth about file operation problems: file opening failed: insufficient permissions, wrong paths, and file occupied. Data writing failed: the buffer is full, the file is not writable, and the disk space is insufficient. Other FAQs: slow file traversal, incorrect text file encoding, and binary file reading errors.

CS-Week 3 CS-Week 3 Apr 04, 2025 am 06:06 AM

Algorithms are the set of instructions to solve problems, and their execution speed and memory usage vary. In programming, many algorithms are based on data search and sorting. This article will introduce several data retrieval and sorting algorithms. Linear search assumes that there is an array [20,500,10,5,100,1,50] and needs to find the number 50. The linear search algorithm checks each element in the array one by one until the target value is found or the complete array is traversed. The algorithm flowchart is as follows: The pseudo-code for linear search is as follows: Check each element: If the target value is found: Return true Return false C language implementation: #include#includeintmain(void){i

C# vs. C  : History, Evolution, and Future Prospects C# vs. C : History, Evolution, and Future Prospects Apr 19, 2025 am 12:07 AM

The history and evolution of C# and C are unique, and the future prospects are also different. 1.C was invented by BjarneStroustrup in 1983 to introduce object-oriented programming into the C language. Its evolution process includes multiple standardizations, such as C 11 introducing auto keywords and lambda expressions, C 20 introducing concepts and coroutines, and will focus on performance and system-level programming in the future. 2.C# was released by Microsoft in 2000. Combining the advantages of C and Java, its evolution focuses on simplicity and productivity. For example, C#2.0 introduced generics and C#5.0 introduced asynchronous programming, which will focus on developers' productivity and cloud computing in the future.

C language multithreaded programming: a beginner's guide and troubleshooting C language multithreaded programming: a beginner's guide and troubleshooting Apr 04, 2025 am 10:15 AM

C language multithreading programming guide: Creating threads: Use the pthread_create() function to specify thread ID, properties, and thread functions. Thread synchronization: Prevent data competition through mutexes, semaphores, and conditional variables. Practical case: Use multi-threading to calculate the Fibonacci number, assign tasks to multiple threads and synchronize the results. Troubleshooting: Solve problems such as program crashes, thread stop responses, and performance bottlenecks.

How to output a countdown in C language How to output a countdown in C language Apr 04, 2025 am 08:54 AM

How to output a countdown in C? Answer: Use loop statements. Steps: 1. Define the variable n and store the countdown number to output; 2. Use the while loop to continuously print n until n is less than 1; 3. In the loop body, print out the value of n; 4. At the end of the loop, subtract n by 1 to output the next smaller reciprocal.

How to define the call declaration format of c language function How to define the call declaration format of c language function Apr 04, 2025 am 06:03 AM

C language functions include definitions, calls and declarations. Function definition specifies function name, parameters and return type, function body implements functions; function calls execute functions and provide parameters; function declarations inform the compiler of function type. Value pass is used for parameter pass, pay attention to the return type, maintain a consistent code style, and handle errors in functions. Mastering this knowledge can help write elegant, robust C code.

Integers in C: a little history Integers in C: a little history Apr 04, 2025 am 06:09 AM

Integers are the most basic data type in programming and can be regarded as the cornerstone of programming. The job of a programmer is to give these numbers meanings. No matter how complex the software is, it ultimately comes down to integer operations, because the processor only understands integers. To represent negative numbers, we introduced two's complement; to represent decimal numbers, we created scientific notation, so there are floating-point numbers. But in the final analysis, everything is still inseparable from 0 and 1. A brief history of integers In C, int is almost the default type. Although the compiler may issue a warning, in many cases you can still write code like this: main(void){return0;} From a technical point of view, this is equivalent to the following code: intmain(void){return0;}

See all articles