鏈表和Trie算法

package com;










public class A {
public B root;
public final class B{
public B  b1;
public B  b2;
public B b3;
public char next;
public B (char next){
this.next=next;
}
 
}
public B search(String key){
if(root==null){
root= new B(key.charAt(0));
}
B cuur=null;
cuur=root;
int index=0;
B node=null;
while(true){
if (cuur == null)
break;
int c=key.charAt(index)-cuur.next;
if(c==0){
index++;
if(index==key.length()){
node=cuur;
break;
}
  cuur=cuur.b1;
}else if(c<0){
cuur=cuur.b3;
}
else if(c>0){
cuur=cuur.b2;
}
}

return node;
}
/**
* tire 算法
* 數據結構鏈表
* @param cont
* @return
*/
public B create(String cont){
int index=0;
if (root == null) {
root = new B(cont.charAt(0));
}
B cuur=null;
cuur=root;
while(true){
int c=cont.charAt(index)-cuur.next;//兩個char 相減,得到ascii碼,
if(c==0){//ascii碼相同
index++;
if(index==cont.length()){//如果當前位置和輸入字符串相等 返回這個節點介紹循環
return cuur;
}
if(cuur.b1==null){//如果當前不存在這個節點,每次循環創建下一個節點用來比較
cuur.b1=new B(cont.charAt(index));
}
cuur=cuur.b1;
}else if(c<0){//如果ASCII碼小於0 我的理解是,這個字符排列在當前字符前面,這樣就會有順序
if(cuur.b2==null){
cuur.b2=new B(cont.charAt(index));
}
cuur=cuur.b2;
}else {
if(cuur.b3==null){
cuur.b3=new B(cont.charAt(index));
}
cuur=cuur.b3;


}

}


}
public static void main(String[] args) {/*
String ss="saasaas";
Class<A> aa=A.class;
 
try {
Object obj=aa.newInstance();
Method  m=aa.getMethod("insert", String.class);
m.invoke(obj, ss);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

*/
A a=new A();
// /a.insert("saa");
a.create("sa");
a.create("sss");

/* try {
String ss="sssss";
A te=aa.getConstructor(ss.getClass()).newInstance(ss.getClass());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
 
}

}
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章