In [1]:
class BinaryTreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
def insert_left(self, value):
self.left = BinaryTreeNode(value)
return self.left
def insert_right(self, value):
self.right = BinaryTreeNode(value)
return self.right
In [50]:
def find_second_largest(tree):
largest = tree
second_largest = None
while tree.left is not None or tree.right is not None:
if tree.right is not None:
tree = tree.right
elif tree.left is not None:
tree = tree.left
if tree.value > largest.value:
second_largest, largest = largest, tree
elif tree.value > second_largest.value:
second_largest = tree
print 'I guess that the second largest value is %s' % (second_largest.value)
return second_largest.value
In [51]:
tree = BinaryTreeNode(100)
tree.left = BinaryTreeNode(0)
tree.right = BinaryTreeNode(200)
find_second_largest(tree) == 100
Out[51]:
In [52]:
tree.right.left = BinaryTreeNode(101)
find_second_largest(tree) == 101
Out[52]:
In [53]:
tree.right.right = BinaryTreeNode(300)
find_second_largest(tree) == 200
Out[53]:
In [54]:
tree.right.right.left = BinaryTreeNode(201)
tree.right.right.right = BinaryTreeNode(400)
tree.right.right.right.right = BinaryTreeNode(500)
tree.right.right.right.right.left = BinaryTreeNode(401)
find_second_largest(tree) == 401
Out[54]:
In [55]:
tree.right.right.right.right.left.right = BinaryTreeNode(402)
find_second_largest(tree) == 402
Out[55]: