字典树

这里写图片描述

这里写图片描述

核心方法:在父节点的子节点中查找关键字, 并返回该节点

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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值