P
pyguy
Hi all,
I am running into a conceptual glitch in implementing a simple binary tree class. My insertion and printing (sorting) seems to be ok, but when I search the tree, my find method isn't doing what I thought it should.
Here is the output of running my tests:
File "trees.py", line 70, in __main__.BinaryTree.find
Failed example:
t.find('Leo')
Expected:
-1
Got nothing
**********************************************************************
File "trees.py", line 72, in __main__.BinaryTree.find
Failed example:
t.find('Cancer')
Expected:
1
Got nothing
**********************************************************************
1 items had failures:
2 of 7 in __main__.BinaryTree.find
***Test Failed*** 2 failures.
So it appears my find method is failing to return -1 for a missing key and 1 for any key below the root. If anyone could clue me in on why this is so, I'd appreciate it.
Here is the code (trees.py):
class BinaryTree:
"""Binary Tree"""
def __init__(self, key, left=None, right=None):
self.key = key
self.left = left
self.right = right
def __str__(self):
return str(self.key)
def addNode(self,key):
if key < self.key:
if self.left:
self.left.addNode(key)
else:
self.left = BinaryTree(key)
elif key > self.key:
if self.right:
self.right.addNode(key)
else:
self.right = BinaryTree(key)
def printTree(self):
""" Capricorn
Aquarius
Cancer
Pices
"""
print self.key
if self.left:
self.left.printTree()
if self.right:
self.right.printTree()
def printSortedTree(self):
""" Aquarius
Cancer
Capricorn
Pices
"""
if self.left:
self.left.printSortedTree()
print self.key
if self.right:
self.right.printSortedTree()
def find(self, key, child=None):
""" 1
"""
if self.key == key:
return 1
elif key < self.key:
if self.left:
self.left.find(key)
else:
return -1
elif key > self.key:
if self.right:
self.right.find(key)
else:
return -1
def _test():
import doctest
doctest.testmod()
if __name__ == '__main__':
_test()
I am running into a conceptual glitch in implementing a simple binary tree class. My insertion and printing (sorting) seems to be ok, but when I search the tree, my find method isn't doing what I thought it should.
Here is the output of running my tests:
**********************************************************************python -i trees.py
File "trees.py", line 70, in __main__.BinaryTree.find
Failed example:
t.find('Leo')
Expected:
-1
Got nothing
**********************************************************************
File "trees.py", line 72, in __main__.BinaryTree.find
Failed example:
t.find('Cancer')
Expected:
1
Got nothing
**********************************************************************
1 items had failures:
2 of 7 in __main__.BinaryTree.find
***Test Failed*** 2 failures.
So it appears my find method is failing to return -1 for a missing key and 1 for any key below the root. If anyone could clue me in on why this is so, I'd appreciate it.
Here is the code (trees.py):
class BinaryTree:
"""Binary Tree"""
def __init__(self, key, left=None, right=None):
self.key = key
self.left = left
self.right = right
def __str__(self):
return str(self.key)
def addNode(self,key):
if key < self.key:
if self.left:
self.left.addNode(key)
else:
self.left = BinaryTree(key)
elif key > self.key:
if self.right:
self.right.addNode(key)
else:
self.right = BinaryTree(key)
def printTree(self):
""" Capricorn
Aquarius
Cancer
Pices
"""
print self.key
if self.left:
self.left.printTree()
if self.right:
self.right.printTree()
def printSortedTree(self):
""" Aquarius
Cancer
Capricorn
Pices
"""
if self.left:
self.left.printSortedTree()
print self.key
if self.right:
self.right.printSortedTree()
def find(self, key, child=None):
""" 1
"""
if self.key == key:
return 1
elif key < self.key:
if self.left:
self.left.find(key)
else:
return -1
elif key > self.key:
if self.right:
self.right.find(key)
else:
return -1
def _test():
import doctest
doctest.testmod()
if __name__ == '__main__':
_test()