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!

Its all about C++ Binary Trees

  1. Oct 31, 2006 #1
    I'm trying to write an address book that is based on a binary tree. I'm devloping in Visual C++ (I blew up my Ubuntu with the new dist), starting with the basics:

    Code (Text):

    #ifndef binarySearchTree_h
    #define binarySearchTree_h

    #include <string>
    #include <iostream>

    using namespace std;

    //Define the node
    struct treeNode
    //An object of type TreeNode
    {
        string data;
        struct node* left;
        struct node* right;

    treeNode(string str)
    //constructor: Make a node containing str.
    {
        data = str;
        left = NULL;
        right = NULL;
    }

    };

    //define the class
    class binarySearchTree
    {
    public:
        binarySearchTree();
            //constructor
        bool isEmpty() const;
                     //
        bool treeContains(treeNode *root, string data);
            //return true if item is one of the items in the
            //binary sort tree to which root points. Return
            //false if not


    protected:
        treeNode *root;
       
    };
    #endif
     
    my problem is in the implementation file in the treecontains() function:

    Code (Text):

    #include "binarySearchTree.h"

    #include <string>
    #include <iostream>

    using namespace std;

    binarySearchTree::binarySearchTree() :root(NULL)
    {
    }
    bool binarySearchTree::isEmpty() const
            //return true if tree is empty
    {
        return (root == NULL);
    }
    bool binarySearchTree::treeContains(treeNode *root, string data)    
            //return true if item is one of the items in the
            //binary sort tree to which root points. Return
            //false if not
        {
            if(root==NULL)
                //tree is empty
            {
                    return false;
            }
            if(data==root->data)
                //item has been found
            {
                return true;
            }

           
            if(data < root->data)
                //item is in left subtree
            {
                return treeContains(root->left, data);  //error
            }
            else
                //item is in right subtree
            {
                return treeContains(root->right, data); //error
            }

        } //end treeContains()

     
    I get an error that says:

    Compiling...
    test.cpp
    binarySearchTree.cpp
    c:\program files\microsoft visual studio\myprojects\binaryaddressbook\binarysearchtree.cpp(41) : error C2664: 'treeContains' : cannot convert parameter 1 from 'struct node *' to 'struct treeNode *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    c:\program files\microsoft visual studio\myprojects\binaryaddressbook\binarysearchtree.cpp(46) : error C2664: 'treeContains' : cannot convert parameter 1 from 'struct node *' to 'struct treeNode *'
    Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
    Error executing cl.exe.

    binaryAddressBook.exe - 2 error(s), 0 warning(s)

    Here is my test file:

    Code (Text):

    #include "binarySearchTree.h"

    #include <iostream>

    using namespace std;

    int main()
    {

        treeNode *root;  //pointer to the root noode in the tree
        root = NULL;  //start with an empty tree



        return 0;
    }
     
    as you can see it doesn't do anything, but get the constructors working.

    please help so I can get this thing going?

    thank you
     
    Last edited: Oct 31, 2006
  2. jcsd
  3. Oct 31, 2006 #2

    0rthodontist

    User Avatar
    Science Advisor

    It's been years since I've used C++ but I think you should have struct treeNode* left; and struct treeNode* right;.
     
  4. Nov 1, 2006 #3
    Yep: TreeNode needs pointers to TreeNode, not pointers to struct node.

    Cheers,
    Tim
     
  5. Nov 1, 2006 #4
    You are so right!!! Thank you!
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook

Have something to add?



Similar Discussions: Its all about C++ Binary Trees
  1. Binary tree algoritms (Replies: 5)

  2. Binary Search Tree C++ (Replies: 1)

  3. Binary tree (Replies: 5)

Loading...