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
69
70
71
72
73
74
75
76
77
78
79
|
from collections import deque
class Node(object):
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
def insert_left(self, value):
self.left = Node(value)
return self.left
def insert_right(self, value):
self.right = Node(value)
return self.right
def min(self):
xs = deque()
result = float('inf')
xs.append(self)
while xs:
node = xs.popleft()
result = min(result, node.value)
if node.left:
xs.append(node.left)
if node.right:
xs.append(node.right)
return result
def max(self):
xs = deque()
result = float('-inf')
xs.append(self)
while xs:
node = xs.popleft()
result = max(result, node.value)
if node.left:
xs.append(node.left)
if node.right:
xs.append(node.right)
return result
def is_bst(self):
result = True
if self.left:
result = result and self.left.max() < self.value
if self.right:
result = result and self.right.min() > self.value
return result
x = Node(
50,
Node(
17,
Node(
12,
Node(9),
Node(14),
),
Node(
23,
Node(19),
),
),
Node(
72,
Node(
54,
None,
Node(67)
),
Node(76),
),
)
assert x.is_bst()
print("Success!")
|