1. 程式人生 > >二叉樹的子樹 二叉樹的序列化,字串的查詢(KMP演算法)

二叉樹的子樹 二叉樹的序列化,字串的查詢(KMP演算法)

求二叉樹的子樹查詢,可以將二叉樹序列化,轉化為字串,然後對字串的子串查詢。
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;//沒找到子串 } }