[Tutor] btree problems

Justin Sheehy dworkin@ccs.neu.edu
14 Mar 2000 17:51:05 -0500


Bruce Sass <bsass@freenet.edmonton.ab.ca> writes:

> Traceback (innermost last):
>   File "/home/bsass/usr/src/python/tree-test2.py", line 43, in ?
>     print "  tree.entry =", tree.entry
> AttributeError: entry

Well, the error is telling you what's wrong: "tree" has no attribute
named "entry".  It is an instance of btree, and your btree classes do
not have variables by that name.  This is probably caused due to a
confusion between trees and nodes.

Personally, I would have used a single class to encompass the
functionality of your "node" and "btree" classes, but that may not
really be necessary to solve your problem.

Your _InsertTree method is also flawed.  It assigns the new node to
the local variable "branch" instead of the relevant instance variable.
While "branch" may have been a reference to the same thing as the
instance variable you wanted to assign to, the assignment statement
merely reassigns what "branch" refers to without looking at its
previous value.

Here is a version of that code that has been modified to take those
changes into effect.  It still has some imperfections, but it
illustrates potential solutions to the problems I note above.

-Justin



class datapkg:
    def __init__(self, key=None, data=None):
        self.key = key
        self.data = data

class btree:
    def __init__(self):
        self.entry = None
        self.left = None
        self.right = None

    def insert(self, newdata):
        if self.entry == None:
            self.entry = datapkg(newdata.key, newdata.data)
        elif newnode.entry.key < self.entry.key:
            if self.left == None:
                self.left = btree()
            self.left.insert(newnode)
        else:
            if self.right == None:
                self.right = btree()
            self.right.insert(newnode)

tree = btree()
print "Created a tree: tree =", tree

n = datapkg()
n.key = "first"
n.data = ['some', 'data']
print "Created a datapkg: n =", n
print "  n.key =", n.key
print "  n.data =", n.data

tree.insert(n)
print "Inserted the datapkg into the tree:"
print "  tree =", tree
print "  tree.entry =", tree.entry
print "  tree.entry.key = ", tree.entry.key