![](/img/trans.png)
[英]Function returning false when it should be returning True. Encoding issue?
[英]I have a linked trie returning false instead of true. What errors can be fixed in the code?
我有一个没有按预期做的尝试。 它的代码如下:
class Trie:
def __insert(node, item):
# This is the recursive insert function.
if len(item) == 0:
return None
elif node == None:
newnode = Trie.TrieNode(item[0])
newnode.follows = Trie.__insert(newnode.follows, item[1:])
return newnode
# return Trie.TrieNode(item[0], follows=Trie.__insert(node, item[1:]))
elif node.item == item[0]:
node.follows = Trie.__insert(node.follows, item[1:])
else:
node.next = Trie.__insert(node.next, item)
def __contains(node, item):
# This is the recursive membership test.
if len(item) == 0:
return True
elif node == None:
return False
elif node.item == item[0]:
return Trie.__contains(node.follows, item[1:])
else:
return Trie.__contains(node.next, item)
class TrieNode:
def __init__(self, item, next=None, follows=None):
self.item = item
self.next = next
self.follows = follows
def __str__(self):
return "TrieNode(" + str(self.item) + ")"
def __init__(self):
self.start = None
def insert(self, item):
sentinel = item + "$"
self.start = Trie.__insert(self.start, sentinel)
def __contains__(self, item):
sentinel = item + "$"
return Trie.__contains(self.start, sentinel)
def main():
t = Trie()
t.insert("cow")
t.insert("cat")
# t.insert("rat")
# t.insert("rabbit")
# t.insert("dog")
print("cow" in t)
if __name__ == "__main__":
main()
以下是代码规则:
对于 __insert function:
- 如果键为空(即键中没有单元),则返回
None
作为空节点。- 如果节点为
None
则使用密钥的下一个单元创建一个新节点,并将密钥的 rest 插入并添加到follows
链接。- 如果密钥的第一个单元与当前节点的单元匹配,则将密钥的 rest 插入到节点的
follows
链接中。- 否则,将密钥插入节点的
next
链接。
对于 __contains function:
- 如果 key 的长度为 0,则返回
True
报告成功。- 如果我们正在查看的节点是
None
然后通过返回False
报告失败。- 如果密钥的第一个单元与当前节点中的单元匹配,则检查从
follows
节点开始的密钥的 rest 的成员关系。- 否则,从 trie 中的
next
节点开始检查密钥的成员资格。
插入一项即可; 例如,如果里面只有cat
,它会在检查cat
时给出True
。
不过,这是一个不同的故事,有多个字符串。 主要的 function 给出了False
,而不是True
,因为它应该。 我想知道这是否与__insert
或__contains
函数有关。 有什么办法可以解决吗?
当item
不为空时,您的__insert
方法应始终返回一个节点。 然而,如果该node
不是 None,它返回 None。 但在那种情况下应该返回node
。
所以在这个方法的最后添加return node
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.