Why Am I Getting Errors in My C++ Binary Tree Implementation?

  • Context: C/C++ 
  • Thread starter Thread starter Trista
  • Start date Start date
  • Tags Tags
    Binary C++ Trees
Click For Summary

Discussion Overview

The discussion revolves around a user's implementation of a binary tree for an address book in C++. The focus is on identifying and resolving compilation errors related to the structure of the tree nodes and their pointers.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • The user describes an error occurring in the `treeContains` function, specifically related to pointer types in the binary tree implementation.
  • Some participants propose that the `left` and `right` pointers in the `treeNode` struct should point to `struct treeNode` instead of `struct node`.
  • One participant confirms the need for `treeNode` pointers, stating that the current implementation is incorrect.

Areas of Agreement / Disagreement

Participants generally agree on the need to correct the pointer types in the `treeNode` struct, but the discussion does not resolve all potential issues in the implementation.

Contextual Notes

The discussion does not address other potential errors or limitations in the implementation beyond the pointer type issue.

Trista
Messages
32
Reaction score
0
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:
#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:
#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:
#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:
Technology news on Phys.org
Trista said:
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:
#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;
}

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

Cheers,
Tim
 
You are so right! Thank you!
 

Similar threads

  • · Replies 3 ·
Replies
3
Views
4K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 22 ·
Replies
22
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
  • · Replies 40 ·
2
Replies
40
Views
4K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 39 ·
2
Replies
39
Views
5K
Replies
89
Views
7K
  • · Replies 13 ·
Replies
13
Views
5K
Replies
73
Views
6K