核心方法:在父节点的子节点中查找关键字, 并返回该节点
static Node checkNode(Node parent,char key){
Node curr = parent.ch;
while(curr!=root&&curr.id!=key) curr = curr.bro;
return curr;
}
插入:在树中插入值为key的节点
在parent的子节点中搜索该key值,若有则返回,没有则创建新节点
如果key值节点是完结节点,还需要额外的标记
static void makeTree(String word,Node root,int index){
char cs[] = word.toCharArray();
Node parent = root;
Node tmp = null;
for (int i = 0; i < cs.length; i++) {
tmp = insert(parent,cs[i]);
parent = tmp;
}
tmp.index = index; //叶子节点需要单独标记
}
搜索:一个元素一个元素的在树中按步查找。
Parent下面有key值的节点,且该点为完结节点的需要特殊处理。然后更新parent和key值,再继续查找
static void search(int x,int y,int x_inc,int y_inc,char map[][],int result[][],int dis){
int _x = x , _y = y;
Node parent = root;
Node tmp;
while(x>=0&&x<l&&y>=0&&y<c&&(tmp=checkNode(parent, map[x][y]))!=root){
if(tmp.index>-1){ //有意义的节点
result[tmp.index][0] = _x;
result[tmp.index][1] = _y;
result[tmp.index][2] = dis;
}
// 更新 parent和key ,都指向下一个需要判断的值
parent = tmp;
x+=x_inc;
y+=y_inc;