if (child == NULL)//父節(jié)點point下沒有首字母相同的子節(jié)點
{ //將str中剩余的字符串保存在left中
left.erase(left.begin(),left.end());
while(!s.empty())
{
left.insert(left.end(),s.top());
s.pop();
}
return (2);
}
target = s.top(); //
s.pop();
if (1)
{
//child節(jié)點下的每個字符與str中的字符順序比較
for (i = 0; i <=(child->strdata.length()-1); i++)
{
if (child->strdata[i] ==target)
{
if (!s.empty())
{
target = s.top();
s.pop();
continue;
}
else return(0); //若str中的字符串先于strdata中的字符串完成比較,則說明該字符 //串已經(jīng)包含在樹中
}
else //比較中出現(xiàn)不同,需要分裂節(jié)點
{
point = child; //point指向要分裂的節(jié)點
left.erase(left.begin(),left.end()); //將str中剩余的字符串寫入left
s.push(target);
while(!s.empty())
{
left.insert(left.end(),s.top());
s.pop();
}
point->breakpoint =i; //寫入父節(jié)點point的分裂點
return (-1); //分裂節(jié)點
}
}
point = child; //走出循環(huán)則進行下一個節(jié)點的搜索
if (!point->flag)//判斷剛剛搜索的是否為葉節(jié)點,若是則停止搜索
{
left.erase(left.begin(),left.end());
s.push(target);
while(!s.empty())
{
left.insert(left.end(),s.top());
s.pop();
}
return (1);
}
s.push(target);
child = NULL;
}
}
//字符串str搜索完成,仍沒有到達葉節(jié)點,返回0
return(0);
}
voidCSuffixTree::Show(mynode m_pSTreeRoot)
{
vector
bIsEnd.push_back(0);
cout << "Root" << endl;
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |