


Print all possible nodes of a Trie built from the given list of strings
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"}
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. }
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]
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; }
Output
All possible joint of trie using the given list of string u t
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!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

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

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

There are four common methods to obtain the first element of std::vector: 1. Use the front() method to ensure that the vector is not empty, has clear semantics and is recommended for daily use; 2. Use the subscript [0], and it also needs to be judged empty, with the performance comparable to front() but slightly weaker semantics; 3. Use *begin(), which is suitable for generic programming and STL algorithms; 4. Use at(0), without manually null judgment, but low performance, and throw exceptions when crossing the boundary, which is suitable for debugging or exception handling; the best practice is to call empty() first to check whether it is empty, and then use the front() method to obtain the first element to avoid undefined behavior.

Functions are the basic unit of organizing code in C, used to realize code reuse and modularization; 1. Functions are created through declarations and definitions, such as intadd(inta,intb) returns the sum of the two numbers; 2. Pass parameters when calling the function, and return the result of the corresponding type after the function is executed; 3. The function without return value uses void as the return type, such as voidgreet(stringname) for outputting greeting information; 4. Using functions can improve code readability, avoid duplication and facilitate maintenance, which is the basic concept of C programming.

The C standard library helps developers improve code quality by providing efficient tools. 1. STL containers should be selected according to the scene, such as vector suitable for continuous storage, list suitable for frequent insertion and deletion, and unordered_map is suitable for fast search; 2. Standard library algorithms such as sort, find, and transform can improve efficiency and reduce errors; 3. Intelligent pointers unique_ptr and shared_ptr effectively manage memory to avoid leakage; 4. Other tools such as optional, variant, and function enhance code security and expressiveness. Mastering these core functions can significantly optimize development efficiency and code quality.

Bit operation can efficiently implement the underlying operation of integers, 1. Check whether the i-th bit is 1: Use n&(1

C folderexpressions is a feature introduced by C 17 to simplify recursive operations in variadic parameter templates. 1. Left fold (args...) sum from left to right, such as sum(1,2,3,4,5) returns 15; 2. Logical and (args&&...) determine whether all parameters are true, and empty packets return true; 3. Use (std::cout

If it is iterating when deleting an element, you must avoid using a failed iterator. ①The correct way is to use it=vec.erase(it), and use the valid iterator returned by erase to continue traversing; ② The recommended "erase-remove" idiom for batch deletion: vec.erase(std::remove_if(vec.begin(),vec.end(), condition), vec.end()), which is safe and efficient; ③ You can use a reverse iterator to delete from back to front, the logic is clear, but you need to pay attention to the condition direction. Conclusion: Always update the iterator with the erase return value, prohibiting operations on the failed iterator, otherwise undefined behavior will result.

The answer is: Use the std::string constructor to convert the char array to std::string. If the array contains the intermediate '\0', the length must be specified. 1. For C-style strings ending with '\0', use std::stringstr(charArray); to complete the conversion; 2. If the char array contains the middle '\0' but needs to convert the first N characters, use std::stringstr(charArray,length); to clearly specify the length; 3. When processing a fixed-size array, make sure it ends with '\0' and then convert it; 4. Use str.assign(charArray,charArray strl

std::is_same is used to determine whether the two types are exactly the same at compile time and return a bool value. 1. In the basic usage, std::is_same::value is true when T and U are exactly the same, otherwise it is false. Different modifiers such as const, reference, pointer, etc. will cause false; 2. You can remove the type modification with std::remove_const, std::remove_reference and other types, and then compare it to achieve more flexible type judgment; 3. It is often used in template metaprogramming in practical applications, such as conditional compilation with ifconstexpr, and perform different logic according to different types; 4.
