forked from y-ncao/Python-Study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtree_node.py
executable file
·99 lines (84 loc) · 2.46 KB
/
tree_node.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
97
98
99
#!/usr/bin/env python
# This is the structure of TreeNode
class TreeNode:
left, right, data = None, None, None
def __init__(self, data):
self.data = data
self.left = None
self.right = None
# Methods to play around with Tree
"""
# Need to look back what's wrong with my implementation
def insert_node(current_node, new_node):
if isinstance(new_node, int):
new_node = TreeNode(new_node)
if current_node.data < new_node.data:
if current_node.right is None:
current_node.right = new_node
return
insert_node(current_node.right, new_node)
else:
if current_node.left is None:
return
insert_node(current_node.left, new_node)
"""
def insert_node(current_node, data):
if not isinstance(current_node, TreeNode):
current_node = TreeNode(data)
else:
if current_node.data > data:
current_node.left = insert_node(current_node.left, data)
else:
current_node.right = insert_node(current_node.right, data)
return current_node
def insert_list(root, list):
for data in list:
insert_node(root, data)
def print_tree(tree_node):
if tree_node is None:
return
else:
print tree_node.data
print_tree(tree_node.left)
print_tree(tree_node.right)
def is_empty(tree_node):
if isinstance(tree_node, TreeNode):
return False
else:
return True
def find_min(tree_node):
if tree_node.left is None:
return tree_node.data
else:
return find_min(tree_node.left)
def find_max(tree_node):
if tree_node.right is None:
return tree_node.data
else:
return find_max(tree_node.right)
def get_height(tree_node):
if tree_node is None:
return 0
else:
return max(get_height(tree_node.left), get_height(tree_node.right)) + 1
def is_balance(tree_node):
if tree_node is None:
return True
if abs(get_height(tree_node.left)-get_height(tree_node.right)) > 1:
return False
else:
return is_balance(tree_node.left) and is_balance(tree_node.right)
if __name__ == "__main__":
root = TreeNode(19)
insert_list(root, [3,6,9,18,20,21,25])
print_tree(root)
print is_empty(root)
print 'max and min'
print find_min(root)
print find_max(root)
print 'Height'
print get_height(root)
print 'Balanced'
print is_balance(root)
print 'testing'
print root.left.data