1. Not finding help here? Sign up for a free 30min tutor trial with Chegg Tutors
    Dismiss Notice
Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

C++ Binary Search Tree preorder printing tree problem

  1. Dec 5, 2011 #1
    Q.When run the program should ask for an input file containing integer keys to be added to the
    search tree. The file will contain one key per line. Add these keys in the order given in the file to
    the search tree. Then print the entire tree using preorder traversal i.e., root, left-child, right-child.
    The output must be indented properly to show the appropriate levels.
    For example, if the input keys are 4, 3, 7, 8, 6. The output should look like this
    4
    <2 spaces>3
    <2 spaces>7
    <3 spaces>6
    <3 spaces>8


    I have made the tree. How do I go about printing it as shown above?? ANY help would highly be appreciated.
     
    Last edited: Dec 5, 2011
  2. jcsd
  3. Dec 5, 2011 #2
    This is my code. Sorry i could not include comments :(
    Code (Text):

    #include <iostream>
    #include <fstream>
    #include <istream>
    #include <string>
    using namespace std;


    struct node
    {
        int data;
        int depth;
        struct node *left, *right;
    };


    void insert(struct node *r, struct node *p)
    {
        if ((r->right == NULL) && p->data > r->data)
        r->right = p;
        else if ((r->right != NULL) && p->data> r->data)
        insert(r->right, p);
        if ((r->left == NULL) && p->data< r->data)
        r->left = p;
        else if ((r->left != NULL) && p->data< r->data )
        insert(r->left, p);
    }
    void tree(struct node *r, int c)
    {
        int top, flag;
        struct node *w, *stack[20];
        if (r != NULL)
        {
            if (c != 4)
            {
                if (c == 1)
                cout<<r->data<<endl;
               
                tree(r->left, c);
                if (c == 2)
                cout<<r->data<<endl;
                tree(r->right, c);
                if (c == 3)
                cout<<r->data<<endl;
            }
        }
     
    }

    void main()
    {
        int choice, c, i, flag,z,j=1;
        char temp = 'N', temp1[15];
        struct node *s, *root, *r, *q;
        root = NULL;

        string line;
        string v;
        cout<<"Enter an unspaced string of path to the file\n (ALL FOLDER NAMES AS WELL AS FILENAMES MUST NOT CONTAIN SPACES)\n"<<endl;
        cin>>v;
        int a;

       
       
       
        fstream myfile (v);
        if (myfile.is_open()) //if the file is open
        {
            while (! myfile.eof() ) //while the end of file is NOT reached
            {
                getline(myfile,line);
                int TempNumOne=line.size();
               
               
                s = (node*)malloc(sizeof(struct node));
                s->left = NULL;
                s->right = NULL;
                int pp=atoi(line.c_str());
                s->data=pp;

               
                if (root == NULL)
                    root = s;
                    else
                    insert(root, s);
                   
            }
        }
            myfile.close();
         
                cout<<"\nPreorder\n"<<endl;
                if (root == NULL)
                    cout<<("Tree Not Started Yet");
                else
                    tree(root, 1);
                j++;
                cout<<("\n Press Any Key To Continue......");
           
    }
     
    Last edited by a moderator: Dec 5, 2011
  4. Dec 5, 2011 #3

    Mark44

    Staff: Mentor

    When you enter code, please surround it with [noparse]
    Code (Text):
     
    [/noparse] tags. This makes your code easier to read by preserving your indentation.
     
  5. Dec 6, 2011 #4
    Clean up your insert routine to only test p->data against r->data once.

    Think about using the (currently unset) depth variable in nodes to control spaces.
    What is the point of "c" in routine "tree"?
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: C++ Binary Search Tree preorder printing tree problem
  1. Binary trees (Replies: 1)

  2. Binary Search tree (Replies: 5)

Loading...