博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TrieTree实现
阅读量:7079 次
发布时间:2019-06-28

本文共 3749 字,大约阅读时间需要 12 分钟。

hot3.png

h文件

#pragma once#include 
#include
using namespace std;class TrieTreeNode{public: TrieTreeNode(); ~TrieTreeNode(); void Clear(); void Clear_Recu(); bool Insert(char* pChar); TrieTreeNode* operator[](char* pChar); string GetStr(); char GetChar(){return m_Char;} void SetChar(char nCh){m_Char = nCh;} bool IsWord(){return m_bWord;} void SetWord(bool bWord){m_bWord = bWord;}private: char m_Char; vector
m_pVect; bool m_bWord; int m_nCount; TrieTreeNode* m_pParent;};class TrieTree{public: TrieTree(void); ~TrieTree(void); void Clear(); void Insert(char* pChar); void Release(char* pChar); TrieTreeNode* GetStrEnd(char* pChar); bool GetFrontWord(int nNum,vector
& vecstr);private: TrieTreeNode m_rHead;};class TrieNodeManager{public: TrieNodeManager(){m_vecList.clear();} ~TrieNodeManager(){} TrieTreeNode* GetNode(); void Clear(); static TrieNodeManager& GetSingle() { return m_Single; }private: static TrieNodeManager m_Single; vector
m_vecList;};

cpp文件

#include "TrieTree.h"/TrieNodeManager TrieNodeManager::m_Single; TrieTreeNode::TrieTreeNode():m_Char(0),m_pVect(),m_bWord(false),m_nCount(0),m_pParent(NULL){}TrieTreeNode::~TrieTreeNode(){}void	TrieTreeNode::Clear(){	m_Char = 0;	m_pVect.clear();	m_bWord = false;	m_nCount = 0;	m_pParent = NULL;}void	TrieTreeNode::Clear_Recu(){	vector
::iterator itr = m_pVect.begin(); while(itr != m_pVect.end()) { (*itr)->Clear_Recu(); itr ++; } Clear();}bool TrieTreeNode::Insert(char* pChar){ if(pChar == NULL || strlen(pChar) <= 0) { return false; } if(m_Char == 0) { m_Char = pChar[0]; } bool bOK = false; if(strlen(pChar) <= 1) { m_bWord = true; m_nCount ++; bOK = true; } else { if(m_Char == pChar[0] || m_Char == (char)0xFF) { vector
::iterator itr = m_pVect.begin(); while(itr != m_pVect.end()) { bOK = (*itr)->Insert(m_Char == (char)0xFF?pChar:pChar + 1); if(bOK) { break; } itr ++; } if(bOK == false) { TrieTreeNode* newNode = TrieNodeManager::GetSingle().GetNode(); newNode->Clear(); newNode->Insert(m_Char == (char)0xFF?pChar:pChar + 1); newNode->m_pParent = this; m_pVect.push_back(newNode); bOK = true; } } } return bOK; }TrieTreeNode* TrieTreeNode::operator[](char* pChar){ if(pChar == NULL) { return NULL; } cout<
<
::iterator itr = m_pVect.begin(); while(itr != m_pVect.end()) { TrieTreeNode& rNode = *(*itr); if(rNode.GetChar() == *pChar) { return rNode[pChar + 1]; } itr ++; } return NULL;}string TrieTreeNode::GetStr(){ string str = ""; if(m_pParent) { str += m_Char; str += m_pParent->GetStr(); } return str;}TrieTree::TrieTree(void){ m_rHead.Clear(); m_rHead.SetChar(0xFF);}TrieTree::~TrieTree(void){ TrieNodeManager::GetSingle().Clear();}void TrieTree::Clear(){ m_rHead.Clear_Recu(); m_rHead.SetChar(0xFF);}void TrieTree::Insert(char* pChar){ if(pChar == NULL || strlen(pChar) <= 0) { return; } m_rHead.Insert(pChar);}void TrieTree::Release(char* pChar){ Insert(pChar); TrieTreeNode* pNode = GetStrEnd(pChar); if(pNode) { pNode->SetWord(false); string str = pNode->GetStr(); string tmp = str; str = ""; for(string::reverse_iterator itr = tmp.rbegin();itr < tmp.rend();itr ++) { str += *itr; } cout<
<
& vecstr){ return false;}///TrieTreeNode* TrieNodeManager::GetNode(){ TrieTreeNode* newNode = new TrieTreeNode(); m_vecList.push_back(newNode); return newNode;}void TrieNodeManager::Clear(){ for(int i=0;i

main

#include "TrieTree.h"int main(){	TrieTree rTree;	rTree.Insert("fuck,ou");	rTree.Insert("black");	rTree.Release("black");	return 0;}

转载于:https://my.oschina.net/u/659405/blog/80284

你可能感兴趣的文章
JAVA IO - 压缩流
查看>>
网络客户端的几种模式
查看>>
hive 新加字段 插入数据 注意事项
查看>>
Gstreamer学习笔记----第一个helloworld程序
查看>>
unix编程之多进程编程
查看>>
R语言学习之聚类
查看>>
我的友情链接
查看>>
斯坦佛编程教程-Unix编程工具(三)
查看>>
DHCP和TFTP配置以及CentOS 7上的服务控制
查看>>
Python 5.5 使用枚举类
查看>>
cookie禁用后session id传值的问题
查看>>
android 动画AnimationSet 和 AnimatorSet
查看>>
Dharma勒索软件继续大肆传播,据称已有100多家希腊网站沦陷
查看>>
成为JavaGC专家(1)—深入浅出Java垃圾回收机制
查看>>
Linux学习笔记(十七) vim
查看>>
三十二、iptables filter表小案例、iptables nat表应用
查看>>
Linux第一周学习笔记(4)
查看>>
袋鼠云数据中台专栏2.0 | 数据中台之数据集成
查看>>
当P4遇见NAT64,UCloud如何快速从IPv4向IPv6演进?
查看>>
iOS少用的框架
查看>>