bobo老师请看看我这个add字典树的递归方法哪里有问题?

来源:10-5 Trie字典树和简单的模式匹配

橙宝宝

2019-07-15

    public void add(String word) {
        root = add(root, word, word.length(), 0);
    }
private Node add(Node node, String word, int length, int depth) {
    if(node == null) {
        return new Node();
    }
    if(depth == length) {
        if(!node.isWord){
            node.isWord = true;
            size++;
        }
        return null;
    }
    char c = word.charAt(depth);
    node.next.put(c, add(node.next.get(c), word, length, depth+1));
    return node;
}

我用递归方式实现后,http://img.mukewang.com/szimg/5d2c927f094ded7503640112.jpg

不知道哪里的逻辑错了,看了很久了,希望解答!

写回答

1回答

liuyubobobo

2019-07-16

不要只是“看”程序,要“调”程序。这个错误,你只要从空树开始,实际添加一个词,比如"cat",就能触发。实际调试,看看你的程序到底是怎么运行的。每一步逻辑运行,数据是如何改变的?和你预期的是否一样?如果不一样,自己哪里想错了?进步就发生在这个过程中哦。


==========


在添加新节点的时候,比如添加 h-e-l-l-o。


从根节点出发,发现h没有,于是进入了:

if(node == null) {

    return new Node();

}


但这个逻辑相当于只添加了h节点,对于后面的 e-l-l-o都没有添加上,就返回了。


==========


我在这个课程的补充代码中,提供了一版我实现的Trie的递归实现,可以参考。

传送门:https://github.com/liuyubobobo/Play-with-Data-Structures/blob/master/10-Trie/Optional-01-Trie-in-Recursion/src/TrieR.java


继续加油!:)

0
0

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1705 问题

查看课程