Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > AVL Balancing

Reply
Thread Tools

AVL Balancing

 
 
scbauer@gmail.com
Guest
Posts: n/a
 
      11-22-2006
Im working on an AVL tree that consists of balancing the tree everytime
you add an object. Im not quite grasping the concept on how to do this
with python. I have seen a few topics on the web about this, and i
clearly understand how when the balance of an AVL tree get to 2 or -2
you have to do a R, L, LR, or a RL rotation. Could anyone possibly help
me/point me in the right direction as far as checking the balance and
actually balancing the tree? Thanks in advance

 
Reply With Quote
 
 
 
 
John Machin
Guest
Posts: n/a
 
      11-22-2006

scba...@gmail.com wrote:
> Im working on an AVL tree


Is this homework?

> that consists of balancing the tree everytime
> you add an object.


That's a peculiar kind of AVL tree. Normally it is *not* necessary to
balance the tree every time a node is added -- it's done only if a
constraint is breached.

> Im not quite grasping the concept on how to do this
> with python.


Could you do it in any other language?

> I have seen a few topics on the web about this, and i
> clearly understand how when the balance of an AVL tree get to 2 or -2
> you have to do a R, L, LR, or a RL rotation. Could anyone possibly help
> me/point me in the right direction as far as checking the balance and
> actually balancing the tree? Thanks in advance


Perhaps if you could show us what you have done already -- I'd be
expecting a class to represent a node, and maybe another to represent
the root of the tree -- and give us an idea of your Python proficency
level (so that we can tailor the advice accordingly), we could help
you.

Regards,
John

 
Reply With Quote
 
 
 
 
scbauer
Guest
Posts: n/a
 
      11-23-2006

John Machin wrote:
> scba...@gmail.com wrote:
> > Im working on an AVL tree

>
> Is this homework?

Yes, this is homework.

>
> > that consists of balancing the tree everytime
> > you add an object.

>
> That's a peculiar kind of AVL tree. Normally it is *not* necessary to
> balance the tree every time a node is added -- it's done only if a
> constraint is breached.


You're right the AVL Tree shouldnt be updated everytime.

>
> > Im not quite grasping the concept on how to do this
> > with python.

>
> Could you do it in any other language?

No, this is an Advanced Algorithms class have to use python

>
> > I have seen a few topics on the web about this, and i
> > clearly understand how when the balance of an AVL tree get to 2 or -2
> > you have to do a R, L, LR, or a RL rotation. Could anyone possibly help
> > me/point me in the right direction as far as checking the balance and
> > actually balancing the tree? Thanks in advance

>

class AVLTree:
"""Holds operations of tree"""
def __init__(self):

self.__root = None
self.__stack=[]
stack = self.__stack

def addNode(self, data):
""" Add node for tree"""
return Node(data)

def insert(self, data):
if self.__root == None:
self.__root = Node(data)
else:
current = self.__root
done = False
while not done:
if data < current.get_data():
if current.left == None:
current.left = Node(data)
stack.append(current)

done = True
else:
current = current.left
else:
if current.right == None:
current.right = Node(data)
stack.append(current)

done = True
else:
current = current.right

> Perhaps if you could show us what you have done already -- I'd be
> expecting a class to represent a node, and maybe another to represent
> the root of the tree -- and give us an idea of your Python proficency
> level (so that we can tailor the advice accordingly), we could help
> you.


Basically what im trying to do is use a stack to keep track of the
items in the AVL tree so that rotations will go smoothly. Having
problems with the stack getting initialized and actually storing the
data there. So that i can reference the elements stack[-3].left =
stack[-2].right and so on for balancing.

thanks
scbauer

 
Reply With Quote
 
scbauer
Guest
Posts: n/a
 
      11-23-2006
This is one of the errors that im getting

Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
t.insert(5)
File "/Users/stevenbauer/Desktop/AVL.py", line 68, in insert
stack.append(current)
NameError: global name 'stack' is not defined

 
Reply With Quote
 
bearophileHUGS@lycos.com
Guest
Posts: n/a
 
      11-23-2006
scbauer wrote:
> This is one of the errors that im getting
> Traceback (most recent call last):
> File "<pyshell#49>", line 1, in <module>
> t.insert(5)
> File "/Users/stevenbauer/Desktop/AVL.py", line 68, in insert
> stack.append(current)
> NameError: global name 'stack' is not defined


def __init__(self):
self.__root = None
self.__stack=[]
stack = self.__stack

def addNode(self, data):
.....
stack.append(current)


Some partial suggestions:
- Why do you use __? Use them only when necessary. My suggestion is to
use:
self._stack = []
- What's the purpose of stack = self.__stack ? It it does nothing
there.
- stack.append(current) can't find the stack name, because it's not
present in this scope, it's present into the __init__ only. My
suggestion is to use the instance attribute name.

You can probably fix that problem now.

Bye,
bearophile

 
Reply With Quote
 
John Machin
Guest
Posts: n/a
 
      11-23-2006
scbauer wrote:
> John Machin wrote:
> > scba...@gmail.com wrote:
> > > Im working on an AVL tree

> >
> > Is this homework?

> Yes, this is homework.


It was a rhetorical question
>
> >
> > > that consists of balancing the tree everytime
> > > you add an object.

> >
> > That's a peculiar kind of AVL tree. Normally it is *not* necessary to
> > balance the tree every time a node is added -- it's done only if a
> > constraint is breached.

>
> You're right the AVL Tree shouldnt be updated everytime.
>
> >
> > > Im not quite grasping the concept on how to do this
> > > with python.

> >
> > Could you do it in any other language?

> No, this is an Advanced Algorithms class have to use python


I meant: do you have the ability ("can") (not the permission ("may"))
to do it in another language.

>
> >
> > > I have seen a few topics on the web about this, and i
> > > clearly understand how when the balance of an AVL tree get to 2 or -2
> > > you have to do a R, L, LR, or a RL rotation. Could anyone possibly help
> > > me/point me in the right direction as far as checking the balance and
> > > actually balancing the tree? Thanks in advance

> >

> class AVLTree:
> """Holds operations of tree"""
> def __init__(self):
>
> self.__root = None
> self.__stack=[]
> stack = self.__stack
>
> def addNode(self, data):
> """ Add node for tree"""
> return Node(data)
>
> def insert(self, data):
> if self.__root == None:
> self.__root = Node(data)
> else:
> current = self.__root
> done = False
> while not done:
> if data < current.get_data():
> if current.left == None:
> current.left = Node(data)
> stack.append(current)
>
> done = True
> else:
> current = current.left
> else:
> if current.right == None:
> current.right = Node(data)
> stack.append(current)
>
> done = True
> else:
> current = current.right
>


and where's the definition of your Node class?

> > Perhaps if you could show us what you have done already -- I'd be
> > expecting a class to represent a node, and maybe another to represent
> > the root of the tree -- and give us an idea of your Python proficency
> > level (so that we can tailor the advice accordingly), we could help
> > you.

>
> Basically what im trying to do is use a stack to keep track of the
> items in the AVL tree so that rotations will go smoothly. Having
> problems with the stack getting initialized and actually storing the
> data there. So that i can reference the elements stack[-3].left =
> stack[-2].right and so on for balancing.


.... and avoiding trouble when there are fewer than 3 elements in the
stack.

I presume that you a righteous dude, and are avoiding the temptation to
google for "AVL tree Python".

So, I'll give you just one hint:

Being righteous, you may wish to examine the ancient scriptures: find
volume 3 of the gospel according to Saint Donald Knuth; therein lies a
description (in arcane notation) of how to insert into a "balanced
tree" without using a stack. If a dumb cluck like me could translate
that into C (with no gotos) and get it to work, a smart lad should have
no trouble translating it into Python.

HTH,
John

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
sequence to FULLY test AVL tree implementation??? Nobody C++ 3 12-29-2004 07:22 PM
How do you do a REMOVAL in an AVL tree? Nobody C++ 1 12-26-2004 09:03 PM
question on AVL trees Nobody C++ 0 12-24-2004 06:20 AM
question on avl trees Evangelista Sami C Programming 1 11-21-2003 06:48 PM
AVL trees Paul Emmons C Programming 1 07-05-2003 06:31 AM



Advertisments
 



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