GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( 273f7e...74bfb5 )
by Xianshun
57s
created

TernarySearchTrie._collect_values()   A

Complexity

Conditions 3

Size

Total Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
dl 0
loc 9
rs 9.6666
c 1
b 0
f 0
1
2
3
class TsNode(object):
4
    key = None
5
    value = None
6
    left = None
7
    mid = None
8
    right = None
9
10
    def __init__(self, key, value=None, left=None, right=None, mid=None):
11
        self.key = key
12
        if value is not None:
13
            self.value = value
14
        if left is not None:
15
            self.left = left
16
        if right is not None:
17
            self.right = right
18
        if mid is not None:
19
            self.mid = mid
20
21
22
def char_at(text, i):
23
    if len(text) - 1 < i:
24
        return -1
25
    return ord(text[i])
26
27
28
class TernarySearchTrie(object):
29
    root = None
30
    N = 0
31
32
    def put(self, key, value):
33
        self.root = self._put(self.root, key, value, 0)
34
35
    def _put(self, x, key, value, d):
36
        c = char_at(key, d)
37
        if x is None:
38
            x = TsNode(key=c)
39
        compared = c - x.key
40
        if compared < 0:
41
            x.left = self._put(x.left, key, value, d)
42
        elif compared > 0:
43
            x.right = self._put(x.right, key, value, d)
44
        else:
45
            if len(key)-1 == d:
46
                if x.value is None:
47
                    self.N += 1
48
                x.value = value
49
            else:
50
                x.mid = self._put(x.mid, key, value, d + 1)
51
        return x
52
53
    def get(self, key):
54
        x = self._get(self.root, key, 0)
55
        if x is not None:
56
            return x.value
57
        return None
58
59
    def _get(self, x, key, d):
60
        c = char_at(key, d)
61
        if x is None:
62
            return None
63
64
        compared = c - x.key
65
        if compared < 0:
66
            return self._get(x.left, key, d)
67
        elif compared > 0:
68
            return self._get(x.right, key, d)
69
        else:
70
            if len(key) - 1 == d:
71
                return x
72
            else:
73
                return self._get(x.mid, key, d + 1)
74
75
    def size(self):
76
        return self.N
77
78
    def is_empty(self):
79
        return self.N == 0
80
81
    def contains_key(self, key):
82
        x = self._get(self.root, key, 0)
83
        if x is None:
84
            return False
85
        return x.value is not None
86
87
    def delete(self, key):
88
        x = self._get(self.root, key, 0)
89
        if x is not None:
90
            self.N -= 1
91
            x.value = None
92
93
    def values(self):
94
        queue = []
95
        self._collect_values(self.root, "", queue)
96
        return queue
97
98
    def keys(self):
99
        queue = []
100
        self._collect(self.root, "", queue)
101
        return queue
102
103
    def _collect(self, x, prefix, queue):
104
        if x is None:
105
            return
106
        if x.value is not None:
107
            queue.append(prefix + chr(x.key))
108
109
        self._collect(x.left, prefix, queue)
110
        self._collect(x.mid, prefix + chr(x.key), queue)
111
        self._collect(x.right, prefix, queue)
112
113
    def _collect_values(self, x, prefix, queue):
114
        if x is None:
115
            return
116
        if x.value is not None:
117
            queue.append(x.value)
118
119
        self._collect(x.left, prefix, queue)
120
        self._collect(x.mid, prefix + chr(x.key), queue)
121
        self._collect(x.right, prefix, queue)