-
Notifications
You must be signed in to change notification settings - Fork 0
/
check_valid_BST.py
96 lines (69 loc) · 1.86 KB
/
check_valid_BST.py
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
"""
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than the node's key.
The right subtree of a node contains only nodes with keys greater than the node's key.
Both the left and right subtrees must also be binary search trees.
Example :
Input :
1
/ \
2 3
Output : False
Input :
2
/ \
1 3
Output : True
"""
import unittest
def is_valid(node, min_val, max_val):
if node == None:
return True
if node.val < min_val or node.val > max_val:
return False
return (is_valid(node.left, min_val, node.val - 1)) and is_valid(node.right, node.val + 1, max_val)
class BinarySearchTreeNode():
def __init__(self, data):
self.right = None
self.left = None
self.val = data
class TestInorderSuccessor(unittest.TestCase):
def test_1(self):
"""
15(a)
/ \
10(b) 20(c)
/ \
d(8) 12(e)
/\ /
f(6) 11(g)
"""
a = BinarySearchTreeNode(15)
b = BinarySearchTreeNode(10)
c = BinarySearchTreeNode(20)
d = BinarySearchTreeNode(8)
e = BinarySearchTreeNode(12)
f = BinarySearchTreeNode(6)
g = BinarySearchTreeNode(11)
a.left = b
a.right = c
b.left = d
b.right = e
d.left = f
e.left = g
self.assertEqual(is_valid(a, -999, 999), True)
def test_2(self):
"""
35(a)
/ \
10(b) 20(c)
"""
a = BinarySearchTreeNode(35)
b = BinarySearchTreeNode(10)
c = BinarySearchTreeNode(20)
a.left = b
a.right = c
self.assertEqual(is_valid(a, -999, 999), False)
if __name__ == "__main__":
unittest.main()