Hello everyone,
I was trying to implement Trie in c++ for the first time and got some
issues in coding its implementation.
The code has 2 commented lines namely cmnt1 and cmnt 2.
I dont understand how does it make a difference if i use cmnt1 instead of
cmnt2 .
Both lines are intended to check if a node in the Trie has childs never
initialized before.
----------------------------- Code Below
-----------------------------------------------
#include <fstream>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
using namespace std;
struct TrieNode
{
bool leaf;
TrieNode* symbol;
};
void child(TrieNode* T)
{
////cmnt1////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////if( T->symbol != NULL)return;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
T->symbol=(TrieNode*)malloc(26*sizeof(TrieNode));
for(int i=0;i<26;i++)
{ T->symbol[i].leaf=false;
T->symbol[i].symbol=NULL;
}
}
TrieNode* makeTrie( )
{
TrieNode* T=(TrieNode*)malloc(sizeof(TrieNode));
T->leaf=false;
child(T);
return T;
}
void insert(string A,TrieNode* root)
{TrieNode* temp=root;
int i;
for(i=0;i<A.length()-1;i++)
{ temp=&(temp->symbol[A[i]-'A']);
//cmnt2//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if( temp->symbol== NULL)
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
child(temp);
}
temp=&(temp->symbol[A[i]-'A']);
temp->leaf=true;
}
vector<char> display;
void print(TrieNode* T)
{
if(T->leaf==true){ for(int i=0;i<display.size();i++)cout<<display[i]<<"
";cout<<endl; }
if(T==NULL)return;
if(T->symbol!=NULL){
for(int i=0;i<26;i++)
{
display.push_back('A'+i);
print(&T->symbol[i]);
display.pop_back(); }
}
}
int main()
{
TrieNode* root=makeTrie();
insert("ADI",root);
insert("CAT",root);
insert("ADII",root);
print(root);
// system("pause");
}
-----------------end of code---------------------
if i remove code of cmnt 1(like in the pasted code) and directly use the
code of cmnt 2 then trie code runs smooth .But if do the opposite case
,which is logically the same ,the code fails to run. kindly help!
--