| | |
binary search trees
Please support our Java advertiser: Programming Forums - DaniWeb Sister Site
![]() |
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.
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.
As people are clearly allowed to attack me but I'm not allowed to defend myself, I no longer post to this site.
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.
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.
*Voted best profile in the world*
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.
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.
As people are clearly allowed to attack me but I'm not allowed to defend myself, I no longer post to this site.
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.
2)The node has one child.
The child node is appended to the parent of the node to be deleted.
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.
ii)Else if no right subtree exists replace the node to be deleted with the it's left child.
Deletion of the root node is also a special case. I think.
And that's it. Although the integers would be names instead.
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.
Perhaps it's time to dust of those books and help me out.
How would I put that into code?
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.
Java Syntax (Toggle Plain Text)
Before deletion of 2 3 / \ 2 7
Java Syntax (Toggle Plain Text)
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.
Java Syntax (Toggle Plain Text)
Before deletion of 2 4 / \ 2 7 \ 3
Java Syntax (Toggle Plain Text)
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.
Java Syntax (Toggle Plain Text)
Before Deletion of 5 7 / \ 5 8 / \ 3 6 / / 1 4
Java Syntax (Toggle Plain Text)
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.
Java Syntax (Toggle Plain Text)
Deletion before 5 7 / \ 5 8 / \ 3 6 / 1
Java Syntax (Toggle Plain Text)
Deletion after 5 7 / \ 3 8 / \ 1 6
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've not much experience with trees in my line of work
How would I put that into code?
*Voted best profile in the world*
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.
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.
As people are clearly allowed to attack me but I'm not allowed to defend myself, I no longer post to this site.
if you're not capable of reading and interpreting date's, don't bother to go check about binary search trees.
there's no need to revive threads that haven't been open for two years
there's no need to revive threads that haven't been open for two years
![]() |
Similar Threads
- please help me: build a binary search tree by Lisp (Legacy and Other Languages)
- Binary Search Trees (C)
- Binary search tree removal (C++)
- Help with Tertiary trees?!?! (Java)
- binary search (C++)
- Insertion in a binary search tree (C++)
Other Threads in the Java Forum
- Previous Thread: array list output
- Next Thread: How to Start a Project!
| Thread Tools | Search this Thread |
Tag cloud for Java
@param android animated api appinventor apple applet application arguments array arrays automation binary bluetooth c++ chat chatprogramusingobjects class classes client code codesnippet compare compiler component coordinates database doctype draw eclipse error event exception file fractal freeze game givemetehcodez graphics gui guidancer health helpwithhomework html ide image input int integer j2me java javaprojects jmf jni jpanel jtable julia linux list login loop map method methods mobile netbeans newbie nonstatic number object oracle page plazmic print problem program programming project recursion scanner screen sell server set sharepoint size sms socket sort sourcelabs sql string swing system test testautomation threads time tree windows






