-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathTST.py
More file actions
68 lines (48 loc) · 1.89 KB
/
TST.py
File metadata and controls
68 lines (48 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#coding:utf-8
"""
------------------------------------------------
@File Name : TST
@Function :
@Author : Minux
@Date : 2018/10/20
@Revised Date : 2018/10/20
------------------------------------------------
"""
from algorithm_and_data_structure.TernarySearchTree.Node import Node
class TST(object):
def __init__(self):
self.root_node = None
def put(self, key, value):
self.root_node = self.put_item(self.root_node, key, value, 0)
def put_item(self, node, key, value, index):
c = key[index]
if node is None:
node = Node(c)
# c与存储节点中的字母不匹配,则进行递归调用
if c < node.character:
node.left_node = self.put_item(node.left_node, key, value, index)
elif c > node.character:
node.right_node = self.put_item(node.right_node, key, value, index)
elif index < len(key)-1: # equal, but index is less than the key means the string is not at the end...
node.middle_node = self.put_item(node.middle_node, key, value, index+1)
else: # string is at the end, insert the value
node.value = value
return node
def get(self, key):
node = self.get_item(self.root_node, key, 0)
if node is None:
return None
else:
return node.value
def get_item(self, node, key, index):
if node is None: # 如果 root node 不存在,直接返回None
return None
c = key[index]
if c < node.character:
return self.get_item(node.left_node, key, index)
elif c > node.character:
return self.get_item(node.right_node, key, index)
elif index < len(key)-1:
return self.get_item(node.middle_node, key, index+1)
else:
return node