Mój kod wygląda następująco:
#!/usr/bin/python
import random
class Tree:
def __init__(self, root=None, size=0):
self.root=root
self.size=size
#self.key_left=[]
#self.key_right=[]
def add(self, node, value):
self.size=self.size+value
direction=random.choice(['left','right'])
if self.root is None:
self.root=Node(value)
return
else:
if direction=='left':
self.root.add_left(value)
return
else:
self.root.add_right(value)
return
def print_tree(self, node):
if node is None:
pass
else:
self.print_tree(node.left)
print node.key
self.print_tree(node.right)
def walk_left(self,node):
if node.left is None:
pass
else:
#self.key_left.append(node.key)
self.walk_left(node.left)
if node.right is not None:
self.walk_left(node.right)
#self.key_left.append(node.key)
def walk_right(self,node):
if node.right is None:
pass
else:
if node.left is None:
self.walk_right(node.right)
#self.key_right.append(node.key)
else:
self.walk_right(node.left)
#self.key_right.append(node.key)
class Node:
def __init__(self, key, left=None, right=None):
self.key=key
self.left=left
self.right=right
def add_left(self, value):
if self.left is None:
self.left=Node(value)
else:
direction=random.choice(['left','right'])
if direction=='left':
self.left.add_left(value)
else:
self.left.add_right(value)
return
def add_right(self, value):
if self.right is None:
self.right=Node(value)
else:
direction=random.choice(['left','right'])
if direction=='right':
self.right.add_right(value)
else:
self.right.add_left(value)
return
if __name__ == '__main__':
data=3
diffrence=10 #dozwolona roznica miedzy dwoma poddrzewami
tree=Tree()
node=Node(data)
tree.add(node,data)
tree.add(node,data)
tree.add(node,data)
tree.add(node,data)
<\code>
Wyrzucę te moje dwie metody: walk_left i walk_right, ale wydaje mi się, że potrzebuję nowej metody w klasie Node, która będzie mi zwracała wielkość każdego węzła na lewo i prawo.