Welcome to the Java Programming Forums


The professional, friendly Java community. 21,500 members and growing!


The Java Programming Forums are a community of Java programmers from all around the World. Our members have a wide range of skills and they all have one thing in common: A passion to learn and code Java. We invite beginner Java programmers right through to Java professionals to post here and share your knowledge. Become a part of the community, help others, expand your knowledge of Java and enjoy talking with like minded people. Registration is quick and best of all free. We look forward to meeting you.


>> REGISTER NOW TO START POSTING


Members have full access to the forums. Advertisements are removed for registered users.

Results 1 to 19 of 19

Thread: Help in printing trees

  1. #1
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Help in printing trees

    Hi
    i have this class but it's missing print the tree
    need to print them level by level

    hope anyone could help asap

    thx in advance
    New Compressed .zip


  2. #2
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    Please post your code with your questions about how to code the algorithm you are trying to implement.

  3. #3
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    ok

    don't know how to put it like u guys so i will just copy it here

    -----------------------
    // tree.java
    // demonstrates binary tree
    // to run this program: C>java TreeApp
    import java.io.*;
    import java.util.*;               // for Stack class
    ////////////////////////////////////////////////////////////////
    class Node
    {
    public int iData;              // data item (key)
    public double dData;           // data item
    public Node leftChild;         // this nodeís left child
    public Node rightChild;        // this nodeís right child
    public void displayNode()      // display ourself
    {
    System.out.print('{');
    System.out.print(iData);
    System.out.print(',');
    System.out.print(dData);
    System.out.print('}');
    }
    }  // end class Node
    ////////////////////////////////////////////////////////////////
    class Tree
    {
    private Node root;             // first node of tree
    // -------------------------------------------------------------
    public Tree()                  // constructor
    { root = null; }            // no nodes in tree yet
     
    // -------------------------------------------------------------
    public Node find(int key)      // find node with given key
    {                           // (assumes non-empty tree)
    Node current = root;               // start at root
    while(current.iData != key)        // while no match,
    {
    if(key < current.iData)         // go left?
    current = current.leftChild;
    else                            // or go right?
    current = current.rightChild;
    if(current == null)             // if no child,
    return null;                 // didnít find it
    }
    return current;                    // found it
    }  // end find()
    // -------------------------------------------------------------
    public void insert(int id, double dd)
    {
    Node newNode = new Node();    // make new node
    newNode.iData = id;           // insert data
    newNode.dData = dd;
    if(root==null)                // no node in root
    root = newNode;
    else                          // root occupied
    {
    Node current = root;       // start at root
    Node parent;
    while(true)                // (exits internally)
    {
    parent = current;
    if(id < current.iData)  // go left?
    {
    current = current.leftChild;
    if(current == null)  // if end of the line,
    {                 // insert on left
    parent.leftChild = newNode;
    return;
    }
    }  // end if go left
    else                    // or go right?
    {
      current = current.rightChild;
    if(current == null)  // if end of the line
    {                 // insert on right
    parent.rightChild = newNode;
    return;
    }
    }  // end else go right
    }  // end while
    }  // end else not root
    }  // end insert()
    // -------------------------------------------------------------
    public boolean delete(int key) // delete node with given key
    {                           // (assumes non-empty list)
    Node current = root;
    Node parent = root;
    boolean isLeftChild = true;
    while(current.iData != key)        // search for node
    {
    parent = current;
    if(key < current.iData)         // go left?
    {
    isLeftChild = true;
    current = current.leftChild;
    }
    else                            // or go right?
    {
    isLeftChild = false;
    current = current.rightChild;
    }
    if(current == null)             // end of the line,
    return false;                // didnít find it
    }  // end while
    // found node to delete
    // if no children, simply delete it
    if(current.leftChild==null &&
    current.rightChild==null)
    {
    if(current == root)             // if root,
    root = null;                 // tree is empty
     
    else if(isLeftChild)
    parent.leftChild = null;     // disconnect
    else                            // from parent
    parent.rightChild = null;
    }
    // if no right child, replace with left subtree
    else if(current.rightChild==null)
    if(current == root)
    root = current.leftChild;
    else if(isLeftChild)
    parent.leftChild = current.leftChild;
    else
    parent.rightChild = current.leftChild;
    // if no left child, replace with right subtree
    else if(current.leftChild==null)
    if(current == root)
    root = current.rightChild;
    else if(isLeftChild)
    parent.leftChild = current.rightChild;
    else
    parent.rightChild = current.rightChild;
    else  // two children, so replace with inorder successor
    {
    // get successor of node to delete (current)
    Node successor = getSuccessor(current);
    // connect parent of current to successor instead
    if(current == root)
    root = successor;
    else if(isLeftChild)
    parent.leftChild = successor;
    else
    parent.rightChild = successor;
    // connect successor to currentís left child
    successor.leftChild = current.leftChild;
    }  // end else two children
    // (successor cannot have a left child)
     
    return true;                                // success
    }  // end delete()
    // -------------------------------------------------------------
    // returns node with next-highest value after delNode
    // goes to right child, then right childís left descendents
    private Node getSuccessor(Node delNode)
    {
    Node successorParent = delNode;
    Node successor = delNode;
    Node current = delNode.rightChild;   // go to right child
    while(current != null)               // until no more
    {                                 // left children,
    successorParent = successor;
    successor = current;
    current = current.leftChild;      // go to left child
    }
    // if successor not
    if(successor != delNode.rightChild)  // right child,
    {                                 // make connections
    successorParent.leftChild = successor.rightChild;
    successor.rightChild = delNode.rightChild;
    }
    return successor;
    }
    // -------------------------------------------------------------
    public void traverse(int traverseType)
    {
    switch(traverseType)
    {
    case 1: System.out.print("\nPreorder traversal: ");
    preOrder(root);
    break;
    case 2: System.out.print("\nInorder traversal:  ");
    inOrder(root);
    break;
    case 3: System.out.print("\nPostorder traversal: ");
    postOrder(root);
    break;
    }
    System.out.println();
    }
     
    // -------------------------------------------------------------
    private void preOrder(Node localRoot)
    {
    if(localRoot != null)
    {
    System.out.print(localRoot.iData + " ");
    preOrder(localRoot.leftChild);
    preOrder(localRoot.rightChild);
    }
    }
    // -------------------------------------------------------------
    private void inOrder(Node localRoot)
    {
    if(localRoot != null)
    {
    inOrder(localRoot.leftChild);
    System.out.print(localRoot.iData + " ");
    inOrder(localRoot.rightChild);
    }
    }
    // -------------------------------------------------------------
    private void postOrder(Node localRoot)
    {
    if(localRoot != null)
    {
    postOrder(localRoot.leftChild);
    postOrder(localRoot.rightChild);
    System.out.print(localRoot.iData + " ");
    }
    }
    // -------------------------------------------------------------
    public void displayTree()
    {                                                                    // need to complet this function
    //to be done as HW
    }  // end displayTree()
    // -------------------------------------------------------------
    }  // end class Tree
    ////////////////////////////////////////////////////////////////
    Last edited by cool_97; July 22nd, 2011 at 09:48 AM.

  4. #4
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    This is the main class

    -------------------------------
    import java.io.*;
    import java.util.*;      
    class TreeApp
    {
     
      public static void main(String[] args) throws IOException
    {
    int value;
    Tree theTree = new Tree();
    theTree.insert(50, 1.5);
    theTree.insert(25, 1.2);
    theTree.insert(75, 1.7);
    theTree.insert(12, 1.5);
    theTree.insert(37, 1.2);
    theTree.insert(43, 1.7);
    theTree.insert(30, 1.5);
    theTree.insert(33, 1.2);
    theTree.insert(87, 1.7);
    theTree.insert(93, 1.5);
    theTree.insert(97, 1.5);
    while(true)
    {
    System.out.print("Enter first letter of show, ");
    System.out.print("insert, find, delete, or traverse: ");
    int choice = getChar();
    switch(choice)
    {
    case 's':
    theTree.displayTree();
    break;
    case 'i':
    System.out.print("Enter value to insert: ");
    value = getInt();
    theTree.insert(value, value + 0.9);
    break;
    case 'f':
    System.out.print("Enter value to find: ");
    value = getInt();
    Node found = theTree.find(value);
    if(found != null)
    {
    System.out.print("Found: ");
    found.displayNode();
    System.out.print("\n");
     
    }
    else
    System.out.print("Could not find ");
    System.out.print(value + '\n');
    break;
    case 'd':
    System.out.print("Enter value to delete: ");
    value = getInt();
    boolean didDelete = theTree.delete(value);
    if(didDelete)
    System.out.print("Deleted " + value + '\n');
    else
    System.out.print("Could not delete ");
    System.out.print(value + '\n');
    break;
    case 't':
    System.out.print("Enter type 1, 2 or 3: ");
    value = getInt();
    theTree.traverse(value);
    break;
    default:
    System.out.print("Invalid entry\n");
    }  // end switch
    }  // end while
    }  // end main()
    // -------------------------------------------------------------
    public static String getString() throws IOException
    {
    InputStreamReader isr = new InputStreamReader(System.in);
    BufferedReader br = new BufferedReader(isr);
    String s = br.readLine();
    return s;
    }
    // -------------------------------------------------------------
    public static char getChar() throws IOException
    {
    String s = getString();
    return s.charAt(0);
    }
    //-------------------------------------------------------------
    public static int getInt() throws IOException
     
      {
    String s = getString();
    return Integer.parseInt(s);
    }
    // -------------------------------------------------------------
    }  // end class TreeApp
    ////////////////////////////////////////////////////////////////
    Last edited by cool_97; July 22nd, 2011 at 09:48 AM.

  5. #5
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    Where are your questions?

    Please wrap your code in code tags. See Go Advanced and the # icon

  6. #6
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    in class tree
    u could notice a function called
    public void displayTree()
    need to complete this function
    and i need it to print the tree level by level

  7. #7
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    need to complete this function
    and i need it to print the tree level by level
    Still waiting for questions about the problems you are having writing the code.

  8. #8
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    Quote Originally Posted by Norm View Post
    Still waiting for questions about the problems you are having writing the code.
    need to know how to write it the idea algorithm anything
    ii seems that the only one who check and help is you
    so i'm doomed

  9. #9
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    this is the code
    PHP Code:
    {
            
    int dep=getHeight();
            
    System.out.printf("Height is %d\n",dep);
            
            
    //Queue q2 = new Queue();
            
    Node current root;
            
    int counter 1;
            
    helpdispley(current);
            
    Node q;
            while (
    q1.dequeue()!= null){
            
    int a=q1.dequeue().iData;
            
    double g=q1.dequeue().dData;
            
    System.out.printf("%d  ,%.2f  \n  ",a,g);
            }
            
            
    //while(counter != dep){

            //    if(current.rightChild !=null && current.leftChild!=null){
            //    q1.enqueue(current.rightChild.iData);
            //    q1.enqueue(current.leftChild.iData);
            //    }
            //    if (current.rightChild ==null && current.leftChild==null){
            //        q1.enqueue(current.iData);
            //    }
                
                
            //} 
    output is
    PHP Code:
    Enter first letter of showinsertfinddelete, or traverses
    Height is 5
    0  
    ,0.00  
      0  
    ,0.00  
      0  
    ,1.20  
      0  
    ,0.00  
      30  
    ,1.70  
      12  
    ,1.20  
      0  
    ,0.00  
      0  
    ,1.50  
      0  
    ,1.50  
      0  
    ,1.70  
      25  
    ,1.70  
      Is 
    empty 

  10. #10
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    You don't say if that is the output you are looking for?
    If not, please explain what is wrong with it and show how you want it to look.


    What is the posted code supposed to do? Half of it is commented out.

  11. #11
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    ok lets assume we have random values

    it should print it like this
    PHP Code:

                              55
                       43          23
                    15   3       7    18 

  12. #12
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    The print outs need to have the required number of leading spaces and intervening spaces.
    This looks like you need to take a piece of paper and mark where the output should go on each line.
    Then come up with an equation to compute the number of leading spaces and the number of intervening spaces on each next line.

  13. #13
    Forum old-timer
    Join Date
    Nov 2008
    Location
    Faversham, Kent, UK
    Posts
    471
    My Mood
    Mellow
    Thanks
    4
    Thanked 58 Times in 54 Posts

    Default Re: Help in printing trees

    Quote Originally Posted by cool_97 View Post
    ii seems that the only one who check and help is you
    so i'm doomed
    Wow, that's not very gracious to someone who's helping you.

    You'll learn more from working with Norm than by insulting him.

  14. #14
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    i'm not insulting him but he said that no one will write "the code for you"
    and i'll be thankfull if he could help
    anyway his effort is realy appreciated

  15. #15
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    Quote Originally Posted by Norm View Post
    The print outs need to have the required number of leading spaces and intervening spaces.
    This looks like you need to take a piece of paper and mark where the output should go on each line.
    Then come up with an equation to compute the number of leading spaces and the number of intervening spaces on each next line.
    mmmm good idea but first of all how to print them in each line
    first the root
    then two nodes
    then 4 nodes .. etc

  16. #16
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    what about this function that i wrote
    PHP Code:
    public void displayTree()
        {
            
    assistinOrder(root);
            
    int level=0;
            while(!
    q1.isEmpty()){
                
    Node temp q1.dequeue();
                
    System.out.print(temp.iData+" ");
                if(
    temp.leftChild!=null)
                
    q1.enqueue(temp.leftChild.iData,temp.leftChild.dData);
                if(
    temp.rightChild!=null)
                
    q1.enqueue(temp.rightChild.iData,temp.rightChild.dData);
                }
        } 
    it calls the function
    PHP Code:
        private void assistinOrder(Node localRoot)
        {
            if(
    localRoot != null)
            {
                
    inOrder(localRoot.leftChild);
                
    q1.enqueue(localRoot.iDatalocalRoot.dData);
                
    inOrder(localRoot.rightChild);
            
            }

        } 
    the output is
    PHP Code:
    Enter first letter of showinsertfinddelete, or traverses
    12 25 30 33 37 43 75 87 93 97 50 Enter first letter of show
    insertfinddelete, or traverse
    need help in printing the node infirst line
    chilren second
    children of the children ... etc

    any ideas ?

  17. #17
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    This looks like you need to take a piece of paper and mark where the output should go on each line.
    Then come up with an equation to compute the number of leading spaces and the number of intervening spaces on each next line.

  18. #18
    Member
    Join Date
    Jul 2011
    Posts
    30
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Default Re: Help in printing trees

    Quote Originally Posted by Norm View Post
    This looks like you need to take a piece of paper and mark where the output should go on each line.
    Then come up with an equation to compute the number of leading spaces and the number of intervening spaces on each next line.
    ok i get it but how to put on first line just the root
    then put on second line the children of the root left and right then their children

  19. #19
    Super Moderator Norm's Avatar
    Join Date
    May 2010
    Location
    Eastern Florida
    Posts
    20,942
    Thanks
    51
    Thanked 2,267 Times in 2,239 Posts

    Default Re: Help in printing trees

    how to put on first line just the root
    First line: Print some spaces and then the root node and then the new line character.
    Second line: spaces Node spaces node spaces node spaces node new line
    etc
    If you understand where the node's are to be printed, then what are you asking?
    Is your question: how to get the nodes that are to be printed on each line?

Similar Threads

  1. Printing Job
    By qwerty53 in forum What's Wrong With My Code?
    Replies: 5
    Last Post: July 19th, 2011, 08:34 AM
  2. Printing an array
    By native in forum What's Wrong With My Code?
    Replies: 7
    Last Post: July 16th, 2011, 09:07 AM
  3. [SOLVED] Printing Array without printing empty elements
    By CarlMartin10 in forum What's Wrong With My Code?
    Replies: 1
    Last Post: April 12th, 2010, 02:41 AM
  4. Merging of Trees..
    By Kumarrrr in forum What's Wrong With My Code?
    Replies: 1
    Last Post: March 23rd, 2010, 11:39 PM
  5. PQ Trees
    By copeg in forum Algorithms & Recursion
    Replies: 1
    Last Post: March 19th, 2010, 09:40 PM