Java实现Trie字典树时统计节点总数的size方法错误如何修正
问题分析
你写的size方法存在3个核心逻辑错误:
- 遍历子节点时提前返回:在for循环中只要遇到第一个非空子节点就直接return,不会继续遍历剩下的25个children位置,完全漏掉了其他分支的所有节点统计。
- isWord逻辑多余且错误:isWord是单词结尾标记,只要节点对象存在就需要计入总数,和该属性取值无关,你写的
if(root.isWord) return 1会直接终止递归,导致子节点全部漏算。 - 没有计入当前节点本身:总节点数需要包含当前传入的节点,你的逻辑中没有对当前节点计数的步骤。
修正代码
正确的递归逻辑为:当前节点计数1 + 所有非空子节点的size之和,实现如下:
public int size() { return size(root); } private int size(TrieNode node) { // 先计入当前节点本身 int count = 1; // 遍历所有子节点,累加非空子节点的总数 for (int i = 0; i < node.children.length; i++) { if (node.children[i] != null) { count += size(node.children[i]); } } return count; }
逻辑验证
简单场景验证:
- 空Trie只有根节点,调用size返回1,符合预期
- 插入单词
A,节点为根节点 -> A节点,size返回2,符合预期 - 插入单词
A和B,节点为根节点 -> A节点、根节点 -> B节点,size返回3,符合预期
内容的提问来源于stack exchange,提问作者IVIahdi
相关产品推荐
相关产品推荐

