I am new in this group,I don't know how far it would help me.
I tried to make a linked based binary tree following the book "data
structures and algorithms in java" By goodRich and tamassia.I did all
but I wanted to implement a function to determine whether a particular
node exists or not.All I want to implement a function boolean
exists(node n).Can anyone help??My program is as follows:-
import java.io.*;
interface Node {
Object getData();
int getID();
}
class TreeEmptyException extends Exception {
TreeEmptyException(String message) {
super(message);
}
}
class LinkBinTree {
BinNode root;
int size;
LinkBinTree(Object O) {
root = new BinNode(0);
}
class BinNode implements Node {
int id;
BinNode left;
BinNode right;
Object data;
BinNode(int iden) {
id = iden;
left = null;
right = null;
data = null;
}
BinNode(Object O) {
id = 0;
left = null;
right = null;
data = null;
}
public Object getData() {return data;}
public int getID() { return id;}
void addLeft(Object obj) {
BinNode b = new BinNode(obj);
left = b;
}
void addRight(Object obj) {
BinNode r = new BinNode(obj);
right = r;
}
BinNode addLeft(Node n,Object O) throws TreeEmptyException
{
if(!exists(n)) throw new TreeEmptyException("Tree doesn't
exists");
return n.addLeft(O);
}
BinNode addRight(Node n,Object O) throws TreeEmptyException{
if(!exists(n)) throw new TreeEmptyException("Tree doesn't
exists");
return n.addRight(O);
}
void preOrder(Node n) {
LinkQueueApp<Integer> q =new LinkQueueApp<Integer>();
int p=n.getID();
q.enqueue(p);
while(!q.isEmpty()) {
p =q.dequeue();
System.out.println("The pre-order is : "
+n.getData());
for(int i=p;(i==p+1) || (i==p+2)&&i<=size;i++)
q.enqueue(i);
}
}
void boolean exists(Node n) {
if(Node == root) return;
else {
if(Node
> I am new in this group,I don't know how far it would help me.
> I tried to make a linked based binary tree following the book "data
[quoted text clipped - 9 lines]
> int getID();
> }
This is kind of interesting. Does your book explain why nodes have both
a data element and an ID? Why not just use the data?
I feel this may make your tree special in some regard, and affect the
answer to your question. More info would help here. How do you search?
Do you look for data? ID? both?
Basanta - 16 Mar 2008 19:04 GMT
> > I am new in this group,I don't know how far it would help me.
> > I tried to make a linked based binary tree following the book "data
[quoted text clipped - 16 lines]
> answer to your question. More info would help here. How do you search?
> Do you look for data? ID? both?
I look only for ID.
Mark Space - 16 Mar 2008 19:26 GMT
> I look only for ID.
Can I ask why? What's the idea there?
Also, are ID comparable? Do they have a sorted order?
HelpMe - 16 Mar 2008 19:46 GMT
> > I look only for ID.
>
> Can I ask why? What's the idea there?
>
> Also, are ID comparable? Do they have a sorted order?
No,but I want to implement functions addLeft and addRight for which
existence of the node where adding is performed is mandatory.
Andrew Marcus - 16 Mar 2008 19:50 GMT
> > > I look only for ID.
>
[quoted text clipped - 4 lines]
> No,but I want to implement functions addLeft and addRight for which
> existence of the node where adding is performed is mandatory.
Andrew Marcus - 16 Mar 2008 19:53 GMT
> > > > I look only for ID.
>
[quoted text clipped - 4 lines]
> > No,but I want to implement functions addLeft and addRight for which
> > existence of the node where adding is performed is mandatory.
See,both of you helpme and basanta.It's so simple I don't think you
require help.Try it out.
> I am new in this group,I don't know how far it would help me.
> I tried to make a linked based binary tree following the book "data
[quoted text clipped - 9 lines]
> int getID();
> }
A generic approach (as a matter of style I include the redundant 'public' in
interface declarations):
interface Node <T>
{
T getData();
Integer getId(); // could parameterize ID type
}
> class LinkBinTree {
> BinNode root;
> int size;
> LinkBinTree(Object O) {
> root = new BinNode(0);
> }
Avoid exorbitant indentation. Up to four spaces per level will suffice.
class BinNode <T> implements Node <T>
> {
T data;
Integer id;
> BinNode left;
> BinNode right;
public BinNode( Integer iden )
> {
> id = iden;
> left = null;
> right = null;
> data = null;
You don't need to set things to null again.
}
> BinNode(Object O) {
Why do you have this constructor?
Parameters should have names that start with a lower-case letter: 'o', not 'O'.
> id = 0;
> left = null;
> right = null;
> data = null;
You don't need to set things to null or zero again.
> }
public T getData() {return data;}
> public int getID() { return id;}
>
> void addLeft( T obj ) {
> BinNode b = new BinNode(obj);
> left = b;
You don't need 'b':
left = new BinNode( obj );
> }
>
> void addRight( T obj ) {
> BinNode r = new BinNode(obj);
> right = r;
> }
public
> BinNode <T> addLeft(Node <T> n, T o ) // lower-case 'o'!
throws TreeEmptyException
> {
> if(!exists(n))
// braces please:
{
throw new TreeEmptyException("Tree doesn't
> exists");
//"Tree doesn't exist"
}
> return n.addLeft( o );
> }
public
> BinNode <T> addRight( Node <T> n, T o ) throws TreeEmptyException{
> if(!exists(n)) throw new TreeEmptyException("Tree doesn't
[quoted text clipped - 18 lines]
> void boolean exists( Node <T> n ) {
> if(Node == root) return;
You don't show a variable 'root'.
> else {
> if(Node
Are you searching for a certain Node, or a Node with a certain value?
public static void boolean exists( BinNode <T> root, T value )
{
if ( root == null )
{ return false; }
return (root.value == null? value == null : root.value.equals( value ))
|| exists( root.left, value ) || exists( root.right, value );
}

Signature
Lew