字典樹(邊改邊抄)

2021-05-28 02:58:38 字數 1810 閱讀 9842

它有3個基本性質:

根節點不包含字元,除根節點外每乙個節點都只包含乙個字元。 從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串。 每個節點的所有子節點包含的字元都不相同。

其基本操作有:查詢 插入和刪除,當然刪除操作比較少見。我在這裡只是實現了對整個樹的刪除操作,至於單個word的刪除操作也很簡單。

搜尋字典專案的方法為

(1) 從根結點開始一次搜尋;

(4) 迭代過程……

其他操作類似處理

給出n個單詞組成的熟詞表,以及一篇全用小寫英文書寫的文章,請你按最早出現的順序寫出所有不在熟詞表中的生詞。

在這道題中,我們可以用陣列列舉,用雜湊,用字典樹,先把熟詞建一棵樹,然後讀入文章進行比較,這種方法效率是比較高的。給定n個互不相同的僅由乙個單詞構成的英文名,讓你將他們按字典序從小到大輸出

用字典樹進行排序,採用陣列的方式建立字典樹,這棵樹的每個結點的所有兒子很顯然地按照其字母大小排序。對這棵樹進行先序遍歷即可。對所有串建立字典樹,對於兩個串的最長公共字首的長度即他們所在的結點的公共祖先個數,於是,問題就轉化為最近公共祖先問題。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

對於指標我算是怕了:只好再看看了;

#define max 26 //字符集大小

typedef struct trienode

trienode;//字典樹的結構表達;

其中的next[26]是對應於每個節點下面的可能有的26個字母,因為對於乙個單詞而言,每個字母後面的字母只有26種可能嘛(如果只是允許大寫或者是小寫的話),而且在後面大家可能會發現,對於某個不為空的節點,它的子節點所對應的字母是按照字母表次序來的,然後ncount就是指該節點的孩子節點的數目,也就是以從根節點到該節點的路徑上所有字母組成的字串為字首的字串的數目。

然後需要定義乙個全域性的頭指標,因為每次對字串開始進行插入操作的時候,都需要從頭結點開始,這樣才可以利用公共字首,減少儲存空間,還有加快查詢速度。

接著就是字典樹的構建問題,其實就是乙個for迴圈,對你所要插入字典樹的字串的每一位字元進行插入操作,同時我們定義兩個node 指標,乙個t,用於中間的新建節點,因為當你查詢到某個節點下面沒有你這個字元所對應的節點的時候,你就需要自己新建乙個節點用以儲存你這個字元,另外乙個指標s,就是用於對頭指標開始操作,作用前面已經說了,接著就開始建樹,對字串str,對每一次迴圈,如果當前指標s下面的對應於當前字元str[i]在字母表的位置的孩子節點為空,就說明此時該字串str於其他的字元的公共字首最多延伸到s處,接著就需要新建節點了,同時對新建節點以及新建節點的孩子進行初始化(尤其是num的初始化),如果當前指標s下面的對應於當前字元str[i]在字母表的位置的孩子結點不為空,那麼此時就不需要進行新建節點,指標向下移動即可.這樣對輸入的每個字串進行插入操作,就可以構建出一棵字典樹了:

trienode memory[1000000];

int allocp =0;

/*初始化*/

void inittrieroot(trienode **proot)

/*建立新結點*/

trienode *createtrienode()

return p;

}/*插入*/

void inserttrie(trienode **proot , char*s)

i =0;

while(s[i])

}//查詢

int searchtrie(trienode **proot , char*s)

i =0;

while(s[i])

return p->ncount;

}

樹邊,前向邊,後向邊,橫叉邊

樹邊,前向邊,後向邊,橫叉邊,應該說,不是乙個圖本身有的概念,應該是圖進行dfs時才有的概念。圖進行dfs會得到一棵dfs樹 森林 在這個樹上才有了這些概念。對圖進行dfs,可以從任意的頂點開始,遍歷的方式也是多樣的,所以不同的遍歷會得到不同的dfs樹,進而產生不同的樹邊,前向邊,後向邊,橫叉邊。所...

深度優先遍歷之樹邊,前向邊,回邊,橫跨邊

無意翻到一篇大佬的部落格,感覺寫得很好,給了我很大的幫助,特此 根據在有向圖g上進行深度優先遍歷所產生的深度優先森林,可以把圖中的邊分為四類 1 樹邊 是dfs森林的實際組成部分。如果頂點v是在探測邊 u,v 時首次被發現的,那麼 u,v 就是一條樹邊。2 前向邊 是dfs樹中從乙個頂點指向該頂點的...

階段1 樹的直徑 改邊權 巡邏

題意 在乙個地區有 n 個村莊,編號為1,2,n。有 n 1 條道路連線著這些村莊,每條道路剛好連線兩個村莊,從任何乙個村莊,都可以通過這些道路到達其他任乙個村莊。每條道路的長度均為1個單位。為保證該地區的安全,巡警車每天都要到所有的道路上巡邏。警察局設在編號為1的村莊裡,每天巡警車總是從警局出發,...