1. 程式人生 > >trie樹字典樹的插入和刪除

trie樹字典樹的插入和刪除

#include<iostream>
#include<cstring>
using namespace std;

typedef struct Trie_node
{
	int count;                    // 統計單詞前綴出現的次數
	struct Trie_node* next[26];   // 指向各個子樹的指標
	bool exist;                   // 標記該結點處是否構成單詞  
}TrieNode , *Trie;

TrieNode* createTrieNode()
{
	TrieNode* node = (TrieNode *)malloc(sizeof(TrieNode));
	node->count = 0;
	node->exist = false;
	memset(node->next , 0 , sizeof(node->next));    // 初始化為空指標
	return node;
}

void Trie_insert(Trie root, char* word)
{
	Trie node = root;
	char *p = word;
	int id;
	while( *p )
	{
		id = *p - 'a';
		if(node->next[id] == NULL)
		{
			node->next[id] = createTrieNode();
		}
                else
                {
                      count ++;      // 這行程式碼用於統計每個單詞前綴出現的次數(也包括統計每個單詞出現的次數)
                }
                node = node->next[id];  // 每插入一步,相當於有一個新串經過,指標向下移動
		++p;
		
	}
	node->exist = true;        // 單詞結束的地方標記此處可以構成一個單詞
}

int Trie_search(Trie root, char* word)
{
	Trie node = root;
	char *p = word;
	int id;
	while( *p )
	{
		id = *p - 'a';
		node = node->next[id];
		++p;
		if(node == NULL)
			return 0;
	}
	return node->count;
}

int main(void)
{
    Trie root = createTrieNode();     // 初始化字典樹的根節點
    char str[12] ;
	bool flag = false;
	while(gets(str))
	{
		if(flag)
			printf("%d\n",Trie_search(root , str));
		else
		{
			if(strlen(str) != 0)
			{
				Trie_insert(root , str);
			}
			else
				flag = true;
		}
	}

    return 0;
}

相關推薦

平衡二叉(AVL)的插入刪除詳解(上)

在電腦科學中,AVL樹是最先發明的自平衡二叉查詢樹。在AVL樹中任何節點的兩個子樹的高度最大差別為1,所以它也被稱為高度平衡樹。查詢、插入和刪除在平均和最壞情況下都是O(log n)。增加和刪除可能需要通過一次或多次樹旋轉來重新平衡這個樹。AVL樹得名於它的發明者G.M.

二叉之紅黑的實現-插入刪除(三)

  #include <stdio.h>   #include <stdlib.h>

trie字典插入刪除

#include<iostream> #include<cstring> using namespace std; typedef struct Trie_node { i

二叉插入刪除

#include<stdio.h>#include<stdlib.h>int flag=1;//定義標籤,用於show()只顯示一次樹的根結點typedef struct tree{ int data; struct tree *lchild; struct tree *rchild;

演算法導論 第十二章:二叉查詢 筆記(二叉查詢、查詢二叉查詢插入刪除、隨機構造的二叉查詢

二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足一個性質:對於樹中的任意一個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意一個節點的關鍵字值都不小於該節點的關鍵字值。 在二叉查詢樹上可以進行搜尋、取最小值、取最大值、取指定節點的前驅

二叉搜尋的定義 查詢 插入刪除

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Delete Node in a BST 二叉查詢的查詢、插入刪除 - Java實現

https://leetcode.com/problems/delete-node-in-a-bst Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return t

B插入刪除

一顆m階的B樹定義如下: 1)Math.ceil(m/2)-1<=非根結點關鍵字個數<=m-1。 2)根結點最少可以只有1個關鍵字。 3)所有葉子結點都位於同一層。 B樹插入操作: 1)根據要插入的key的值,找到葉子結點並插入。 2)判斷當前結點

B-插入刪除

對關鍵碼序列{20,54,69,84,71,30,78,25,93,41,7,76,51,66,68,53,3,79,35,12,15,6},建立5階B-樹的過程如圖6-9所示。   ①向空樹中插入20,得圖6-9(a)。   ②插入54,69,84,得圖6-9(b)

圖解B+插入刪除(一看就懂)

一,    M階B+樹的定義(M階是指一個節點最多能擁有的孩子數,M>2): 圖1.1 3階B+樹         (1)根結點只有1個,分支數量範圍[2,m]。         (2)除根以外的非葉子結點,每個結點包含分支數範圍[[m/2],m],其中

圖解BB+插入刪除操作

一,    M階B+樹的定義(M階是指一個節點最多能擁有的孩子數,M>2):圖1.1 3階B+樹        (1)根結點只有1個,分支數量範圍[2,m]。        (2)除根以外的非葉子結點,每個結點包含分支數範圍[[m/2],m],其中[m/2]表示取大於m/2的最小整數。        (

b+插入刪除操作

轉載自:b+樹介紹B+樹B+樹和二叉樹、平衡二叉樹一樣,都是經典的資料結構。B+樹由B樹和索引順序訪問方法(ISAM,是不是很熟悉?對,這也是MyISAM引擎最初參考的資料結構)演化而來,但是在實際使用過程中幾乎已經沒有使用B樹的情況了。B+樹的定義十分複雜,因此只簡要地介紹

二叉查詢插入刪除詳解

(1)  左子樹不空,則左子樹上的所有結點的值均小於根結點的值 (2)  右子樹不空,則右子樹上的所有結點的值均大於根結點的值 二叉查詢樹可以為空,二叉查詢樹是遞迴定義的,也就是說其左右子樹也為二叉查詢樹。 二叉查詢樹是一種動態查詢表,可以進行動態地插入和刪除。前面的定義

二叉搜尋的查詢、最值查詢、插入刪除

對於一棵二叉搜尋樹,如果不為空,它應該滿足以下三個特點:1、樹上的任一結點,該結點的值都大於它的非空左子樹的值。2、樹上的任一結點,該結點的值都小於它的非空右子樹的值。3、任一結點的左右子樹都是二叉搜尋樹。對於二叉搜尋樹的查詢,思路方法是:1、從根結點開始查詢,如果樹為空,就

二叉搜尋插入刪除

插入:比較簡單,只需要確認這個元素是否在二叉樹中存在 T Insert(Tree T,int Element){ if(!T){ T=(Tree)malloc(sizeof(***)); T

二叉搜尋的定義、查詢、插入刪除

二叉搜尋樹的定義 二叉搜尋樹,也稱有序二叉樹,排序二叉樹,是指一棵空樹或者具有下列性質的二叉樹: 1. 若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 2. 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 3. 任意節

B+插入刪除

一,    M階B+樹的定義(M階是指一個節點最多能擁有的孩子數,M>2): 圖1.1 3階B+樹         (1)根結點只有1個,分支數量範圍[2,m]。         (2)除根以外的非葉子結點,每個結點包含分支數範圍[[m/2],m],其中[m/2]表示取大於m/2的最小整

資料結構——(8)——二叉搜尋插入刪除操作

二叉搜尋樹的插入操作 我們要在二叉搜尋樹中執行各種操作的前提就是,我們首先要有一棵二叉搜尋樹。那麼,如何建立一棵二叉搜尋樹呢?最簡單的方法就是我們可以從一棵空樹開始,每次呼叫一個addNode函式,將一個新的值插入二叉搜尋樹中。但是在每次插入的時候我們都要保持

B的定義、插入刪除

B樹基本定義: B樹是為磁碟或其他直接存取的輔助儲存裝置而設計的一種平衡搜尋樹。 一棵B樹是具有以下性質的有根樹: 1. 每個結點x有下面的屬性:     a. x.n,當前儲存在結點x中的關鍵字個數;     b. x.n個關鍵字本身,x.key[1], x.key[2]

C語言實現二叉插入刪除

二叉樹的插入刪除://首先介紹二叉樹的插入:     //首先需要明白插入的規則:每個建好的結點p都需要從跟結點開始與根結點相比較資料域,如果根結點的資料域小於結點p,則接著將結點p與根結點的右子樹相比較,否則p將與根結點的左子樹相比較;     //繼續往下類推,一直到最後