Building Binary Searh Tree with multiple types (hint hint Generics?)

I have built binary search trees before and even wanted to build a B+ tree for primary indexes but my Professor suggested limiting to BST.
My question is can I build a BST with a generic type parameterized code using Comparable and Generics to help me insert numeric and non-numeric (String) type nodes using the requirement that anything less than the root go left, greater than or equal to the root go right. There will be no duplicates.
This is definitely new territory for me so any help is appreciated.

Always Learning wrote:
I have a Comparable<Object> x I would like to compareTo(Some other Comparable<Object>) but I know I am going about this all wrong.
Essentially I want to be able to compare String lexicographically or integers/floats in order to properly insert them into a binary search tree and I wanted to use the Java language constructs of the Comparable interface and possibly generics to do it.
This would result in a simple String1.compareTo(String2) or int1.compareTo(int2) etc.So it sounds like you actually have a Comparable<T>; or possibly a Comparable<String>, where all your types are first converted to Strings (however, in the case of ints, that probably means adding leading '0's).
The generics tutorial suggests that you use Comparable<? super T> in cases of arbitrarily comparable items; however, I think you first need to decide how your comparisons are going to be done. For example, how does a String compare to an Integer in your scenario?
Winston

Similar Messages

  • FecthAccounts on resources with multiple types of accounts

    Hello,
    I'm customizing the rename user form so I can modify some account attributes that are related to
    accountId and rename them in a propper way. For getting all account attributes on all resources I set
    fetchAccounts form property to true but only attributes on resources whose identity template is
    simple - It's not a resource with multiple types of accounts - are retrieved.
    The attributes of the resource with a setup of multiple types of accounts are not retrieved with fecthAccounts
    set to true. Has that happened to you ?
    Any clue ?
    Thanks,
    Pablo C.

    You can use Correlation Id for this Purpose. Producer should set Correlation id while posting the message and Consumer can check for Correlation id while dequeue.
    I did have this requirement before and used correlation id for it.
    http://sriworks.wordpress.com/2009/10/22/conditional-dequeue-mq-adapter/
    Or Just Accept Opaque Payload and tweak in BPEL Process using TranslateFromNative function.

  • How to build a BIG TREE with Tree-Form layout

    Hi,
    I do have a self-referenced table with our org structure - 15 000 positions.
    I do want to create a tree with this structure.
    Requirements :
    a, to have a tree-form layout
    b, to have search capabilities
    I have tried to use several combinations (maybe all)
    - from using only one View object and create recursive tree - doesn't even run
    - to use two View objects, first as top level nodes, the other as the rest - it runs
    but I can search only top level, and what is worse, by clicking on the node for showing additional information (tree-form layout) I'm waiting for ages for seeing the info
    (it seems that all records are loaded one by one into AS)
    Could you provide some ideas how to deal with this ?
    Thanks.

    I am sorry, this is beyond the scope of this forum.
    As with any functionality not directly provided by JHeadstart, you can build it yourself using the ADF design time tools in JDeveloper. Please use the JDeveloper forum for help on this first step.
    Then, to keep your pages generatable you can move these customizations to custom templates. We are happy to help you with this last step, should you have problems there.
    Steven Davelaar,
    JHeadstart Team.

  • Af:tree With Multiple Child Table

    Hi,
    I have a requirement where i have to show a af:tree with child records from two different view Iterators, I created one tree but facing a issue. It shows the name of the Child view iterators and then the record inside it.
    Like :-
    ---> DummyRecord1 *(Record from Parent Iterator)*
    ------------>viewIterator1 *(Name of the First Child Iterator)*
    -------------------->DummyRecord2 *(Record from First Child Iterator)*
    ------------>viewIterator2 *(Name of the Sec Child Iterator)*
    -------------------->DummyRecord2 *(Record from Sec Child Iterator)*
    But i don't want to show the Name of the Child iterators in the tree.I want the tree something like:-
    ---> DummyRecord1 *(Record from Parent Iterator)*
    -------------------->DummyRecord2*(Record from First Child Iterator)*
    -------------------->DummyRecord3 *(Record from Sec Child Iterator)*
    My .Jspx code:-
    <af:tree value="#{bindings.*someViewIterator*.treeModel}"
    var="node"
    selectionListener="#{bindings.*someViewIterator*.treeModel.makeCurrent}"
    rowSelection="single" id="t1">
    <f:facet name="nodeStamp">
    <af:outputText value="#{node}" id="ot1"/>
    </f:facet>
    </af:tree>
    My Page Def code:-
    ><variableIterator id="variables"/>
    > <iterator Binds="*someView*" RangeSize="25"
    > DataControl="AppModuleDataControl"
    id="*someViewIterator*"/>
    </executables>
    <bindings>
    <tree IterBinding="*someViewIterator*"
    id="*someView1*">
    <nodeDefinition DefName="*someView*"
    Name="*someView12*">
    <AttrNames>
    <Item Value="nodeValue"/>
    </AttrNames>
    <Accessors>
    <Item Value="viewIterator2"/>
    <Item Value="viewIterator3"/>
    </Accessors>
    </nodeDefinition>
    <nodeDefinition DefName="viewIterator2"
    Name="viewIterator123">
    <AttrNames>
    <Item Value="nodeValue"/>
    </AttrNames>
    </nodeDefinition>
    <nodeDefinition DefName="viewIterator3"
    Name="viewIterator345">
    <AttrNames>
    <Item Value="nodeValue"/>
    </AttrNames>
    </nodeDefinition>
    </tree>
    </bindings>
    I am using JDev  11.1.1.6.0
    Why is Tree component creating an extra level showing the iterator name, is there any way to remove that level and show the tree with the actual records only...Thanks in advance..

    Hi,
    trees show hierarchical dependencies of a single path. While it is possible to hack the tree binding configuration to show two root nodes, you can't show two child iterators unless you warp the ADF binding model in a custom tree model (in which case its your code that retrieves and manages the user selection)
    Frank

  • Vectors with multiple types of objects

    Ok, this is what i need. I have a main class, EquationVector, and i have four smaller classes, MathPrimitive, which is abstract and all of the following classes extend, Number which just holds numbers, Operator which takes care of what type it is and what to do, and Variable, which knows its value, its coef and its power. I use the MathPrimitive class because all of the other classes need to have a common getType() method, plus it holds static values for all the possible types. What i need is some sort of storage method that is dynamically resizeable, and can handle multiple types of objects. I tried vector, but it doesnt work, even when i cast. I want to be able to do something to the effect of
    myArray.elementAt(index).getOperatorType()
    and be able to get the operator type if its an operator, but at the same time be able to do
    myArray.elementAt(index).getCoef()
    and be able to get the coeficient if its a variable. I'm not sure if this is actually possible, so if anybody has any good ideas i would be really apreciative. Thank you.

    Vector will absolutely work, as will ArrayList
    You just better make sure you know what kind of objects are at what slots in the vector.
    opType = ((MathPrimitive) myArray.elementAt(index)).getOperatorType();
    If you don't know what type of object is at a particular slot you can always use
    Object o = myArray.elementAt(index);
    if (o instanceof MathPrimitive)
    else
    ....

  • Referencing another class with multiple types.

    Here's my code:
    import java.io.*;
    import java.util.Scanner;
    class CH3_13
        public static void main ( String args[] )
            Scanner input = new Scanner( System.in );
         // Invoice MyInvoice = new Invoice();
         /* myInvoice.displayInvoice();*/   }   
    class Invoice
    {   private String partNumber;
        private String partDescription;
        int quantity;
        double pricePerItem;
        public Invoice( String pNumber, String description, int qNumber, double price)
            partNumber = pNumber;
            partDescription = description;
            setQuantity( qNumber );
            setPricePerItem ( price );   }
          public void setPartNumber ( String pNumber )
          {   partNumber = pNumber;   }
          public String getPartNumber ()
          {   return partNumber;   }
          public void setPartDescription ( String description )
          {   partDescription = description;   }
          public String getPartDescription ()
          {   return partDescription;   }
          public void setQuantity ( int qNumber )
          {   quantity = ( qNumber < 0 ) ? 0 : qNumber;   }
          public int getQuantity ()
          {   return quantity;   }
          public void setPricePerItem ( double price )
          {   pricePerItem = ( price < 0.0) ? 0.0 : price;   }
          public double getPricePerItem ()
          {   return pricePerItem;   }
          public double getInvoiceAmount()
          {   return getQuantity() * getPricePerItem();   }
           public void displayInvoice ()
          {   System.out.println("The part number is" + getPartNumber() );
              System.out.println("The part description is" + getPartDescription() );
              System.out.println("The quantity number is" + getQuantity() );
              System.out.println("The price per item is" + getPricePerItem() );
              System.out.println("The invoice amount is" + getInvoiceAmount() );   }          
    }The problem is.. I cannot use the line:
    // Invoice MyInvoice = new Invoice(); (it's commented out for that reason)
    ... because it seems I cannot reference it because the Invoice class has multiple types defined in it. As this is the case, is there anyway, I'd be able to get that line to compile?

    I am not sure of this is what you are looking for but I would definitely suggest some real refactoring here. First of all the part no. name description donot belong to the invoice class so they need to go into a different class named part no. Secondly you need to identify the relationship which I would say would be has a relationship between invoice and part. A many to many relationship. SInce its many to many I would guess it would need to be biderectional associaition.
    However if we have a defined no. of parts in the inventory I would suggest using the reference objects, by predefining them and loading them into memory to ensure that if every time an invoice has a part, a new part object is not created.

  • "Get All Descendents" Method with multiple "Type" inputs

    Hi,
    Is there any way, so that I can specify multiple "Type" to Get All Descendents Method invoke node.
    For example if I need to get all descendents of "Folder" and "VI" type.
    I am not allergic to Kudos, in fact I love Kudos.
     Make your LabVIEW experience more CONVENIENT.

    Try "(VI,Folder)" and post back please
    No help..!!
    @ tst
    Call it twice.
    That option I had figured out, but I need the references of All Descendents (Folders and VIs) in the order of they appear in the project.
    I am not allergic to Kudos, in fact I love Kudos.
     Make your LabVIEW experience more CONVENIENT.

  • JSP, Data tags, How to build a form edit with multiple records

    Hi, I'm using Jdev 9i.
    I would like to have a JSP form where I can update, delete, insert records displayed in the same page.
    I know that I can use the data tag jbo:DataEdit to do it, but it only works with a single record, I want to have several records in the same page, displayed horizontally.
    The best example is a form to add items in an invoice:
    Productid description quantity price
    1001 xxx 10 20.00
    1002 yyy 15 30.00
    1003 zzz 7 10.00
    Could you give some help please?
    Thanks in advance.

    The form display is dictated by how you process the submit. I would build the form by using standard html tags. Here is another pseudo example:
    <FORM ACTION="target.jsp" >
    <TABLE>
    <TR>
    <TD>
    DeptNo
    </TD>
    <TD>
    DName
    </TD>
    <TR>
    <%
    int nRow = 0;
    %>
    <jbo:RowsetIterate datasource="ds">
    <%
    // increment the row number
    nRow++;
    String sDeptno = "Deptno" + nRow;
    String sDname = "Dname" + nRow;
    String sRowKey = "RowKey" + nRow;
    %>
    <jbo:Row id="myrow" action="current">
    <TR>
    <TD>
    <input type="text" name="<%=sDeptno%>" value='<jbo:ShowValue dataitem="Deptno" />' />
    </TD>
    <TD>
    <input type="text" name="<%=sDname%>" value='<jbo:ShowValue dataitem="Dname" />' />
    <input type="text" name="<%=sRowKey%>" value='<jbo:ShowValue dataitem="RowKey" />' />
    </TD>
    <TR>
    </jbo:Row>
    </jbo:RowsetIterate>
    <input type="submit" />
    </TABLE>
    </FORM>
    NOTE: This should get you started!!!

  • Tree with multiple root nodes does not display

    I am trying to create a tree to display some hierarchical data which contains several root nodes.
    I have specifed that the TREE_ROOT value is always Null as the root nodes have a null value for the PARENT_ID. The page displays yet none of the data is displayed.
    I have manage to get it to work by creating a dummy single root that I reference from the existing root values?

    Phattam,
    The TREE_ROOT identifies the root node's ID, not its PARENT_ID.
    For example, if we build a tree on the oehr_employees table, the ID is EMPLOYEE_ID and the PARENT_ID is MANAGER_ID. therefore, to identify the start of the tree, we could populate the TREE_ROOT with a select statement e.g.
    SELECT employee_id FROM oehr_employees WHERE employee_id = 100This identifies a single value and the tree starts from employee_id 100.
    If we used a select statement that retrieves more than one row, e.g.
    SELECT employee_id FROM oehr_employees WHERE manager_id = 100then the tree starts at one of the children of employee_id 100 - ApEx will not show a tree that has more than one starting node. If you want to show these alternative starting points, you'll need to do exactly what you have done - create a 'dummy' root node.
    Hope this helps,
    Bryan.

  • Burning CDs with multiple types of files

    How do you burn iTunes songs and pdf documents to the same disk?

    This would be done on My MacBook, not a Nano.  Haha

  • Creating Profile type report that hold fields with multiple values

    Really hoping someone can please help me out as I am very new to Crystal Reports.
    We use Maximizer CRM and we have been in need of some custom reports to rule out risk for regulators. I contacted Max and they suggested the only possible way is to create through Crystal. Its been almost one month already and I still cannot for the likes of me get this report operating properly. I have been inside and out on all sorts of forums, posted topics but no luck! So I will give it one more attempt in hopes that one of you geniuses can show me the way.
    In Maximizer CRM there is date, numeric, alphanumric and table. Our table fields items can be set to either single value or multi-value. So in crystal i did a default join of Client.tbl and the user-defined fields from view and joined the client id and contact number from all the view fields to client table. See Image:
    and I have dragged all the relevant fields in rows (in details section) rather then columns because we would be reporting on more then 1 record at a time. My problem is - If there is a table with multiple items selected (values), the records triple in count and it will show the same record over and over with just single field value changing at a time.
    The formula field you see in the image is from when I posted a discussion and Abhilash assisted me by providing the formulas I should add:
    1) Create a formula with this code and place this on the Details Section:
    whileprintingrecords;
    stringvar s := s + {field_with_multiple_values} + ", ";
    2) Next, move all the fields (except the formula field above) from the Details section to the Report Footer
    3) Create a formula with this code and place this on the Report Footer. This field would replace the existing field that contains multiple values:
    whileprintingrecords;
    stringvar s;
    Left(s, len(s)-2);
    This method is not working out for this type of report. When I add the formula Crystal is still counting my 2 records as 5 records but I can only view it as a single record and the multi-field has all the values for both records and displaying as a single record. See image:
    Can anyone please assist and advise where I am going wrong?
    -Jared

    Hi Jared,
    Thanks for taking down memory lane that is Maximizer.  Nice to see their table structure hasn't been simplified in the last 20 years.
    If I understand what's happening, you should only see 2 records and not 5.  That means your joins are creating duplicate records.  For now I'm going to skip over trying to optimize your query because I still have bad dreams of linking Maximizer tables.
    There are a couple of ways to work around the duplicates, one is to create a group and instead of having your formula in the Detail section, put it in the Group Header.  The question is what would you create your group on that would get you a unique record?
    If you know where the duplicates are coming from, create a Record Selection Formula that will remove the duplicates.
    There is also the menu option Database | Select Distinct Records.  I've never really had success with this one but there's no harm in giving it a shot.
    I would have you try and find which table or combination of tables is generating the duplicates but that requires playing with your links.  Normally I'd start by adding one table at a time and dropping one field onto the report.  If it doesn't repeat then add another table and field and repeat until you get your duplicates.  Once you know where they are coming from then you can either drop that table from your query or create a selection formula that removes the duplicates.
    Good luck,
    Brian

  • How can I read a binary file stream with many data type, as with AcqKnowledge physio binary data file?

    I would like to read in and write physiological data files which were saved by BioPac�s AcqKnowledge 3.8.1 software, in conjunction with their MP150 acquisition system. To start with, I�d like to write a converter from different physiodata file format into the AcqKnowledge binary file format for version 3.5 � 3.7 (including 3.7.3). It will allow us to read different file format into an analysis package which can only read in file written by AcqKnowledge version 3.5 � 3.7 (including 3.7.3).
    I attempted to write a reader following the Application Note AS156 entitled �AcqKnowledge File Format for PC with Windows� (see http://biopac.com/AppNotes/ app156Fi
    leFormat/FileFormat.htm ). Note the link for the Mac File format is very instructive too - it is presented in a different style and might make sense to some people with C library like look (http://biopac.com/AppNotes/ app155macffmt/macff.htm).
    I guess the problem I had was that I could not manage to read all the different byte data stream with File.vi. This is easy in C but I did not get very far in LabView 7.0. Also, I was a little unsure which LabView data types correspond to int, char , short, long, double, byte, RGB and Rect. And, since it is for PC I am also assuming the data to be written as �little endian� integer, and thus I also used byte swap vi.
    Two samples *.acq binary files are attach to this post to the list. Demo.acq is for version 3.7-3.7.2, while SCR_EKGtest1b.acq was recorded and saved with AcqKnowledge 3.8.1, which version number is 41.
    I would be grateful if you someone could explain how to handle such binary file stream with LabView and send an example to i
    llustrate it.
    Many thanks in advance for your help.
    Donat-Pierre
    Attachments:
    Demo.acq ‏248 KB
    SCR_EKG_test1b.acq ‏97 KB

    The reading of double is also straight forward : just use a dble float wired to the type cast node, after inverting the string (indian conversion).
    See the attached example.
    The measure of skin thickness is based on OCT (optical coherent tomography = interferometry) : an optical fiber system send and received light emitted to/back from the skin at a few centimeter distance. A profile of skin structure is then computed from the optical signal.
    CC
    Chilly Charly    (aka CC)
             E-List Master - Kudos glutton - Press the yellow button on the left...        
    Attachments:
    Read_AK_time_info.vi.zip ‏9 KB

  • How to build a form with multiple tables in oracle application express

    Hi everyone,
    I have got problem in building a form with multiple tables.I have a main table with (20) columns and this main table is related to the other tables with the primary key-foreign key relation ship.My requirement is i have to build a form which has fields from many tables and all the fields are related to the main table using (ID) column.In that form if i enter ID field i have to get information from differnt tables.
    Please help me to solve this (building a form with mutiple tables)
    Thank you
    sans

    Sans,
    I am no Apex expert, but with a situation as "complex" as yours, have you thought about creating a VIEW that joins these 7/8 tables, placing an INSTEAD OF trigger on that view to do all the business logic in the database, and base your application on the view?
    This is the "thick-database" approach that has been gaining momentum of late. The idea is to put your business logic in the database wherever possible, and let the application (Form, Apex, J2EE, whatever) concentrate on UI issues,

  • ORACLE EXPRESS: build a page with multiple forms linked to one table

    hi,
    im using oravle application express. APEX
    i would like to build a page with multiple forms linked to one table (orders) , the page has 4 from  each one with different order_id number (depending on filtering),  and if the order is prepared click yes for each order and this 'YES' should be UPDATED AND SAVED to each order number in the same table with the press of one button.
    i created all the form as (sql query)
    and create one update process
    (UPDATE ORDERS
    SET TRAY_PREPARED =:P10_TRAY_PREPARED_1
    WHERE ORDER_ID =:P10_ORDER_ID_1;
    UPDATE ORDERS
    SET TRAY_PREPARED =:P10_TRAY_PREPARED_2
    WHERE ORDER_ID =:P10_ORDER_ID_2;
    UPDATE ORDERS
    SET TRAY_PREPARED =:P10_TRAY_PREPARED_3
    WHERE ORDER_ID =:P10_ORDER_ID_3;
    UPDATE ORDERS
    SET TRAY_PREPARED =:P10_TRAY_PREPARED_4
    WHERE ORDER_ID =:P10_ORDER_ID_4;
    i dont know really if i can do that, but it appear hat it actually saving according to order_id number , but not all the time some time it saved the value as "null".
    please guide me what is the correct way to do this.
    I READ THIS ONE
    http://stackoverflow.com/questions/7877396/apex-creating-a-page-with-multiple-forms-linked-to-multiple-related-tables
    BUT IT WAS FOR MULTIPLE INSERT
    thanks.

    Sans,
    I am no Apex expert, but with a situation as "complex" as yours, have you thought about creating a VIEW that joins these 7/8 tables, placing an INSTEAD OF trigger on that view to do all the business logic in the database, and base your application on the view?
    This is the "thick-database" approach that has been gaining momentum of late. The idea is to put your business logic in the database wherever possible, and let the application (Form, Apex, J2EE, whatever) concentrate on UI issues,

  • Problem with binary search tree

    Hi all, just having troubles with a program im writing.
    My program is based on a binary search tree full of items which are passed in via an input file and then saved to an output file.
    I have written a sellItem method which gets passed in the item and quantity that has been sold which then needs to be changed in the binary tree.
    Here if my sell Item method:
        public void sellItem(Item item, int quantity){
            stockItem = item;
            mQuantity = quantity;
            if (tree.includes(stockItem)){
                int tempQuantity = stockItem.getQuantityInStock();
                tempQuantity -= mQuantity;
            else{
                throw new IllegalArgumentException("The Barcode " + mBarCode + " does NOT exist.");
        }and here is where i am calling it in a test class :
    number1.sellItem(item1, 40);Each item is in this format :
    ABCD, PENCIL, 1, 0.35, 200, 100, 200
    where 200 is the quantity.
    Therefore if i pass 40 into the method the binary search tree should then store the quantity as 160.
    below is a copy of my binary tree :
    public class BSTree extends Object {
        private class TreeNode extends Object{
            public Comparable data;
            public TreeNode left;
            public TreeNode right;
            public TreeNode() {
                this(null);
            public TreeNode(Comparable barCode){
                super();
                data = barCode;
                left = null;
                right = null;
        private TreeNode root; 
        private int nodeCount;
        public BSTree(){
            super();
            root = null;
            nodeCount = 0;
        public boolean isEmpty() {
          return root == null;
        public int size() {
          return nodeCount;
        private TreeNode attach(TreeNode newPointer, TreeNode pointer){
            if (pointer == null){
                nodeCount++;
                return newPointer;
            else {
                Comparable obj1 = (Comparable) newPointer.data;
                Comparable obj2 = (Comparable) pointer.data;
            if (obj1.compareTo(obj2) < 0) //Go left
                pointer.left = attach(newPointer, pointer.left);
            else //Go right
                pointer.right = attach(newPointer, pointer.right);
            return pointer;
        public void insert(Comparable item){
            //Create a new node and initialize
            TreeNode newPointer = new TreeNode(item);
            //Attach it to the tree
            root = attach(newPointer, root);
        public Comparable remove(Comparable key) {
            TreeNode pointer;
            TreeNode parent;
            //Find the node to be removed
            parent = null;
            pointer = root;
            while ((pointer != null) && !key.equals(pointer.data)) {
                parent = pointer;
                if (key.compareTo(pointer.data) <0)
                    pointer = pointer.left;
                else
                    pointer = pointer.right;
            if (pointer == null)
                return null;
            //Orphans
            TreeNode leftSubtree = pointer.left;
            TreeNode rightSubtree = pointer.right;
            if (parent == null)
                root = null;
            else if (key.compareTo(parent.data) < 0)
                parent.left = null;
            else
                parent.right = null;
            //Reattaching any orphans in the left subtree
            if (leftSubtree != null) {
                root = attach(leftSubtree, root);
                nodeCount--;
            //Reattaching any orphans in the right subtree
            if (rightSubtree != null) {
                root = attach(rightSubtree, root);
                nodeCount--;
            nodeCount--;
            return pointer.data;
        private TreeNode search(TreeNode pointer, Comparable key) {
            if (pointer == null)
                return null;
            else if (pointer.data.compareTo(key) == 0)
                return pointer;
            else if (key.compareTo(pointer.data) < 0)
                return search(pointer.left, key);
            else
                return search(pointer.right, key);
        public boolean includes(Comparable key) {
            return (search(root, key) != null);
        public Comparable retrieve(Comparable key) {
            TreeNode pointer;
            pointer = search(root, key);
            if (pointer == null)
                return null;
            else
                return pointer.data;
        public Comparable[] getAllInOrder() {
            Comparable[] list = new Comparable[nodeCount];
            inOrderVisit(root,list,0);
            return list;
        private int inOrderVisit(TreeNode pointer, Comparable[] list, int count) {
            if (pointer != null) {
                count = inOrderVisit(pointer.left, list, count);
                list[count++] = pointer.data;
                count = inOrderVisit(pointer.right, list, count);
            return count;
        public String toString() {
            StringBuffer result = new StringBuffer(100);
            inOrderString(root, result);
            return result.toString();
        private void inOrderString(TreeNode pointer, StringBuffer result) {
            if (pointer != null) {
                inOrderString(pointer.left, result);
                result.append(pointer.data.toString() + "\n");
                inOrderString(pointer.right, result);
    }Thanks for everyones help. Keep in mind i'm very new to java.

    Hi all, just having troubles with a program im writing.
    My program is based on a binary search tree full of items which are passed in via an input file and then saved to an output file.
    I have written a sellItem method which gets passed in the item and quantity that has been sold which then needs to be changed in the binary tree.
    Here if my sell Item method:
        public void sellItem(Item item, int quantity){
            stockItem = item;
            mQuantity = quantity;
            if (tree.includes(stockItem)){
                int tempQuantity = stockItem.getQuantityInStock();
                tempQuantity -= mQuantity;
            else{
                throw new IllegalArgumentException("The Barcode " + mBarCode + " does NOT exist.");
        }and here is where i am calling it in a test class :
    number1.sellItem(item1, 40);Each item is in this format :
    ABCD, PENCIL, 1, 0.35, 200, 100, 200
    where 200 is the quantity.
    Therefore if i pass 40 into the method the binary search tree should then store the quantity as 160.
    below is a copy of my binary tree :
    public class BSTree extends Object {
        private class TreeNode extends Object{
            public Comparable data;
            public TreeNode left;
            public TreeNode right;
            public TreeNode() {
                this(null);
            public TreeNode(Comparable barCode){
                super();
                data = barCode;
                left = null;
                right = null;
        private TreeNode root; 
        private int nodeCount;
        public BSTree(){
            super();
            root = null;
            nodeCount = 0;
        public boolean isEmpty() {
          return root == null;
        public int size() {
          return nodeCount;
        private TreeNode attach(TreeNode newPointer, TreeNode pointer){
            if (pointer == null){
                nodeCount++;
                return newPointer;
            else {
                Comparable obj1 = (Comparable) newPointer.data;
                Comparable obj2 = (Comparable) pointer.data;
            if (obj1.compareTo(obj2) < 0) //Go left
                pointer.left = attach(newPointer, pointer.left);
            else //Go right
                pointer.right = attach(newPointer, pointer.right);
            return pointer;
        public void insert(Comparable item){
            //Create a new node and initialize
            TreeNode newPointer = new TreeNode(item);
            //Attach it to the tree
            root = attach(newPointer, root);
        public Comparable remove(Comparable key) {
            TreeNode pointer;
            TreeNode parent;
            //Find the node to be removed
            parent = null;
            pointer = root;
            while ((pointer != null) && !key.equals(pointer.data)) {
                parent = pointer;
                if (key.compareTo(pointer.data) <0)
                    pointer = pointer.left;
                else
                    pointer = pointer.right;
            if (pointer == null)
                return null;
            //Orphans
            TreeNode leftSubtree = pointer.left;
            TreeNode rightSubtree = pointer.right;
            if (parent == null)
                root = null;
            else if (key.compareTo(parent.data) < 0)
                parent.left = null;
            else
                parent.right = null;
            //Reattaching any orphans in the left subtree
            if (leftSubtree != null) {
                root = attach(leftSubtree, root);
                nodeCount--;
            //Reattaching any orphans in the right subtree
            if (rightSubtree != null) {
                root = attach(rightSubtree, root);
                nodeCount--;
            nodeCount--;
            return pointer.data;
        private TreeNode search(TreeNode pointer, Comparable key) {
            if (pointer == null)
                return null;
            else if (pointer.data.compareTo(key) == 0)
                return pointer;
            else if (key.compareTo(pointer.data) < 0)
                return search(pointer.left, key);
            else
                return search(pointer.right, key);
        public boolean includes(Comparable key) {
            return (search(root, key) != null);
        public Comparable retrieve(Comparable key) {
            TreeNode pointer;
            pointer = search(root, key);
            if (pointer == null)
                return null;
            else
                return pointer.data;
        public Comparable[] getAllInOrder() {
            Comparable[] list = new Comparable[nodeCount];
            inOrderVisit(root,list,0);
            return list;
        private int inOrderVisit(TreeNode pointer, Comparable[] list, int count) {
            if (pointer != null) {
                count = inOrderVisit(pointer.left, list, count);
                list[count++] = pointer.data;
                count = inOrderVisit(pointer.right, list, count);
            return count;
        public String toString() {
            StringBuffer result = new StringBuffer(100);
            inOrderString(root, result);
            return result.toString();
        private void inOrderString(TreeNode pointer, StringBuffer result) {
            if (pointer != null) {
                inOrderString(pointer.left, result);
                result.append(pointer.data.toString() + "\n");
                inOrderString(pointer.right, result);
    }Thanks for everyones help. Keep in mind i'm very new to java.

Maybe you are looking for