User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the Java section within the Software Development category of DaniWeb, a massive community of 401,716 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 4,099 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our Java advertiser: Lunarpages Java Web Hosting
Views: 2534 | Replies: 5
Reply
Join Date: Aug 2005
Posts: 4,709
Reputation: iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light 
Rep Power: 17
Solved Threads: 309
iamthwee's Avatar
iamthwee iamthwee is offline Offline
Industrious Poster

binary search trees

  #1  
Jan 10th, 2006
Hello there,

I need 2 learn binary search tree 4 my assinement in java but canot find anything useful.

If anyone no of a useful link please tell me. Why is there no source code for deleting a node...that's all i ask how to delete a freaking node arg. :eek:
Member of: F-ugly code club

Join today don't delay!
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Nov 2004
Location: Netherlands
Posts: 5,693
Reputation: jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough 
Rep Power: 18
Solved Threads: 195
Colleague
jwenting's Avatar
jwenting jwenting is offline Offline
duckman

Re: binary search trees

  #2  
Jan 11th, 2006
in a binary tree every branch has 2 branches leading from it (ok, in reality it could be one but I'm taking the perfectly ballanced tree here).
It's therefore impossible to remove a node without rebuilding the entire tree, as just linking the children of that node to the parent of the removed node would mean you now don't have a binary tree anymore.
You could remove the entire branch, but then your tree would no longer be ballanced.

If you want that you can simply remove the reference to the element at the top of the branch you're removing from its parent node and it's gone.

There are tons of examples of trees online, though most may be in C or C++.
Look for artificial intelligence, path finding algorithms, things like that.
42 Private messages asking for help will be ignored
In the frozen land of Nador they were forced to eat Steve's iMinstrels, and there was much rejoicing.
Reply With Quote  
Join Date: Aug 2005
Posts: 4,709
Reputation: iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light 
Rep Power: 17
Solved Threads: 309
iamthwee's Avatar
iamthwee iamthwee is offline Offline
Industrious Poster

Re: binary search trees

  #3  
Jan 11th, 2006
thank u jwenting.

Yes I meant to say rebuild the tree as well upon deletion of the node. I know tutorials exist in c/c++ but I would looking for a really good one in java.

They tell me how to do all the other things, traverse a tree in pre/post/in order, insert nodes and just about everything else.

But, I'm guessing due to it's complicated nature, they leave out deletion. If u or anyone else could provide a link i wud b so greatful.

:cry:

My assinement requires me to add names of students to a binary tree then sort then in alphabetical order. And then ask the user to delete one name whilst still retaining the inherent structure of a binary search tree.

God bless.
Member of: F-ugly code club

Join today don't delay!
Reply With Quote  
Join Date: Nov 2004
Location: Netherlands
Posts: 5,693
Reputation: jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough 
Rep Power: 18
Solved Threads: 195
Colleague
jwenting's Avatar
jwenting jwenting is offline Offline
duckman

Re: binary search trees

  #4  
Jan 11th, 2006
Deletion is usually left out because it constitutes recreating the tree minus the deleted element, and therefore is no different from building a new tree from scratch (or more likely by moving branches to different positions in the tree until the tree is once again ballanced).

Examples in C and C++ should be no problem for someone who's at the stage of more complicated data structures than an array or single linked list, you should really know enough to at least understand them by now (I regularly read books using examples in languages I've no experience in, it's a good mental exercise).

The principles and algorithms are the same after all, except in Java you don't have to mess with all that dereferencing pointers because you have references and can reference those directly

Best way to sort them is to do an insertion sort, sorting them during insertion. If that leaves the tree unballanced, you can then ballance sections of the tree until the entire thing is ballanced (copying entire branches to fall under other branches).

I've not much experience with trees in my line of work (Maps and Lists are far more common in most fields, and if a tree is needed a TreeSet will let me use a built in tree through a Set interface).
But that's the theory at least in a nutshell.
42 Private messages asking for help will be ignored
In the frozen land of Nador they were forced to eat Steve's iMinstrels, and there was much rejoicing.
Reply With Quote  
Join Date: Aug 2005
Posts: 4,709
Reputation: iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light iamthwee is a glorious beacon of light 
Rep Power: 17
Solved Threads: 309
iamthwee's Avatar
iamthwee iamthwee is offline Offline
Industrious Poster

Re: binary search trees

  #5  
Jan 11th, 2006
Hullo,

I've followed your advice by looking at the algorithm for deletion. Ur right regardless of the language the implementation should be similar.

Here's what I've broken it down to.

For the sake of brevity I am using integers to illustrate my point, however, in my actual assinement I will need to use actual names. Since the names will be cast as strings, direct comparison of their size will be possible. By size I mean, alphabetical precidance.

Most of this i red of the net:

Deletion

The algorithm must ensure that when the node is deleted from the tree, the ordering of the binary tree is kept intact.

Special Cases that have to be considered:


1)The node to be deleted has no children.

In this case the node may simply be deleted from the tree.

Before deletion of 2

       3
      / \
     2   7
After deletion of 2

       3
        \
         7


2)The node has one child.

The child node is appended to the parent of the node to be deleted.

Before deletion of 2

       4
      / \
     2   7
     \
      3
After deletion of 2

       4
      / \
     3   7


3)The node to be deleted has two children.

The algorithm must determine which node to use in place of the node to be deleted:


i)Use the inorder successor of the node to be deleted.

Before Deletion of 5

              7
             / \
            5   8
           / \
          3   6
         /   /
        1   4

After deletion of 5
              7
             / \
            4   8
           / \
          3   6
         /   
        1    


ii)Else if no right subtree exists replace the node to be deleted with the it's left child.

Deletion before 5

              7
             / \
            5   8
           / \
          3   6
         /   
        1   


Deletion after 5

             7
            / \
           3   8
          / \
         1   6

Deletion of the root node is also a special case. I think.

And that's it. Although the integers would be names instead.


Best way to sort them is to do an insertion sort, sorting them during insertion.

I think the whole idea of my teacher giving me this assinement is to show that the names can be sorted in alphabetical order using 'in-order' traversal, or at least that what I was assuming.

I've not much experience with trees in my line of work


Perhaps it's time to dust of those books and help me out.

How would I put that into code?
Member of: F-ugly code club

Join today don't delay!
Reply With Quote  
Join Date: Nov 2004
Location: Netherlands
Posts: 5,693
Reputation: jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough 
Rep Power: 18
Solved Threads: 195
Colleague
jwenting's Avatar
jwenting jwenting is offline Offline
duckman

Re: binary search trees

  #6  
Jan 11th, 2006
first and second case are easy, first you just null the reference, second you replace the reference with the only child it has.

Third you determine the node to move up one spot and set one of its children to the other node that was a child of the deleted node.
You then reorder that entire branche.
If the node you're moving up has an empty child that's easy as there's nothing to do, if it has children those will start to move down.
42 Private messages asking for help will be ignored
In the frozen land of Nador they were forced to eat Steve's iMinstrels, and there was much rejoicing.
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

DaniWeb Java Marketplace
Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

Thread Tools Display Modes

Similar Threads
Other Threads in the Java Forum

All times are GMT -4. The time now is 8:56 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC