字典树(Trie树)

    xiaoxiao2023-12-05  151

    什么是数据结构:数据在计算中存储的方式

    数据的存储方式:

    暂时回顾:

    关于树的基本知识与字典树的构成:

    代码如下:

    package hihocode; //首先第一部分,构建字典树的数据结构部分 class TreeNode{ final static int max_size=26; //每一行的节点最大数为26个 char data; //当前节点的字母 boolean isEnd=false; //当前节点是否是查询节点的最后一位 TreeNode[] childs; //子节点 //构建函数进行字典树的初始化 public TreeNode() { childs=new TreeNode[max_size]; //构建子树的节点 isEnd=false; //初始化子节点的判断值为不是最后一位 } } //开始构建字典树 public class Trietree { //第一步,想字典树中插入数据 public static void CreateTireTree(TreeNode node,String str) { //将我们传入的字符串转换为字符数组 char[] d=str.toCharArray(); for(int i=0;i<d.length;i++) { //这里之所以要进行 int loc = d[i] - 'a'; //是一种程序的简化,‘a’的ASCII码是97,‘b’是98,之后所有的英文字母减去‘a’之后,剩下的 //剩下的其实就不是我么所设想的存储字母了,而直接就可以将数字存储了 //比如说: //char a="a"; //int x=a; //那么x其实就是97 int loc = d[i] - 'a'; if(node.childs[loc]==null) { //判断是否有这个字母,如果没有 node.childs[loc]=new TreeNode(); //就家里新节点,一个节点就是一个对象,一个新的节点能够建立新的子树 node.childs[loc].data=d[i]; } node=node.childs[loc]; //直接赋值,子树的父节点就是原来树的子节点,所以将原来树的子节点的值建立新的树(也就是子树)的父节点 } node.isEnd=true; //到这里,返回查询值 } //同理,差不多 public static boolean find(TreeNode node,String str) { char[] d=str.toCharArray(); for(int i=0;i<d.length;i++) { int loc=d[i] -'a'; if(node.childs[loc]!=null) { node=node.childs[loc]; }else { return false; } } return node.isEnd; } public static void main(String[] args) { String[] s= {"string","char","int","boolean",""}; TreeNode root=new TreeNode(); for(String ss:s) { CreateTireTree(root,ss); } System.out.println("OK!"); System.out.println(find(root,"string")); System.out.println(find(root,"char")); System.out.println(find(root,"stri")); System.out.println(find(root,"float")); } }

    最后结果是:

    最新回复(0)