# Binary Tree

I'm finding it hard do debug the attached code that constructs a binary search tree.
Please let me know what I am missing.

Thanks!
``````treeNode* constructBinaryTree()
{
treeNode **root = new treeNode*;
treeNode *current = new treeNode;
//root = NULL;
//current = NULL;
int data = 0;

while( data!= -1)
{
printf("\n\nEnter a value (Enter -1 to stop): ");
scanf("%d", &data);

treeNode *newNode = new treeNode;
newNode->left = NULL;
newNode->right = NULL;
newNode->data = data;

if(!current)
{
*root = newNode;
}
else
{
current = *root;
while(current->left || current->right)
{
if(data<=current->data)
current = current->left;
else
current = current->right;
}
if(data<=current->data)
current->left = newNode;
else
current->right = newNode;
}
}

return *root;
}
``````
``````#include <iostream>
#include <conio.h>
#pragma once

typedef struct treeNode
{
struct treeNode *left;
struct treeNode *right;
int data;
} treeNode;
``````
###### Who is Participating?

Commented:
I might be missing something, but I don't see why root needs to be doubly-deferred; it could probably just be treeNode *.

I think you need to uncomment your initializing your variables to NULL, and get rid of the new's in the declarations.  Each time you read in a value in the while loop, you want to create a node for it, which you are doing.  There will be no other nodes other than the values you read in, so you are already creating all the nodes you need without the initializers.

You need to move your line 25 (current = *root;) before the test (!current).  You only want to do this only once, the first time, when you have not yet assigned a root node, the rest of the time you will start searching from the root.  As I said previously, I think this could be "current=root" if root is declared differently (otherwise you'd need to initialize *root to be NULL rather than root).

0

Author Commented:
Thank you!

Can you tell me why I must not initialize them to NULL, and why I must not use "new" to declare them?

It is working better now, but not for all inputs. When I enter 3, 4, 5, -1 it creates the tree without any problems.

When I enter 3, 4, 1, then I get an exception : "Access violation reading location 0x00000000."

0

Author Commented:
My code now looks like this:
0

Author Commented:
This code now works:

Thanks!
``````#include <iostream>
#include <conio.h>
#include "treeNode.h"
#pragma once

treeNode* constructBinaryTree()
{
treeNode *root = new treeNode;
treeNode *current = new treeNode;
treeNode *previous = new treeNode;
root = NULL;
current = NULL;
previous = NULL;
int data;

while(1)
{
printf("\n\nEnter a value (Enter -1 to stop): ");
scanf("%d", &data);
if(data==-1)
break;

treeNode *newNode = new treeNode;
newNode->left = NULL;
newNode->right = NULL;
newNode->data = data;

current = root;
previous = root;

if(!current)
{
root = newNode;
}
else
{
while(current)
{
previous = current;

if(data <= current->data)
current = current->left;
else
current = current->right;
}
if(data<=previous->data)
previous->left = newNode;
else
previous->right = newNode;
}
}

return root;
}
``````
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.