二叉樹的子樹 二叉樹的序列化,字串的查詢(KMP演算法)
阿新 • • 發佈:2019-01-28
求二叉樹的子樹查詢,可以將二叉樹序列化,轉化為字串,然後對字串的子串查詢。
1.KMP演算法
#include <stdio.h>
typedef char* String;
void get_next( String T, int *next )
{
int j = 0;//i是字尾,j是字首
int i = 1;
next[1] = 0;
while( i < T[0] )
{
if( 0 == j || T[i] == T[j] )
{
i++;
j++;
next[i] = j;//字首和字尾對應的T相等時,next陣列字尾加1的值為字首的值
}
else
{
j = next[j];//如果不相等時,改變字首的值,再迴圈
}
}
}
// 返回子串T在主串S第pos個字元之後的位置
// 若不存在,則返回0
int Index_KMP( String S, String T, int pos )
{
int i = pos;
int j = 1;
int next[255];
get_next( T, next );
while( i <= S[0] && j <= T[0] )
{
if ( 0 == j || S[i] == T[j] )
{
i++;
j++;
}
else
{
j = next[j];//失配時,確定下一次匹配的位置
}
}
if( j > T[0] )//說明找到了子字串
{
return i - T[0];//確定字串的位置
}
else
{
return 0;//沒找到子串
}
}