Бинарное дерево(проблема с выводом)

здравствуйте, уважаемые... вот я строю бинарное дерево, а затем хочу вывести на экран содержимое. Вроде всё правильно делал но есть пробелма. Код:
#include <iostream>
#include <conio.h>
using namespace std;

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

class Tree
{
	node* first;
	node* create;
public:
	Tree() { first=NULL;}
	void add(int d); // создание дерева 
	void print(); // фунция для ввода дерева
private:
	node* son(node* tree,int d); // добавление элементов в непустое дерево
	bool print_son(node* tree); // рекурсивная ф-ция для вывода
	
};


void Tree::add(int d)
{
	if(first==NULL)
	{
		first=new node;
		first->data=d;
		first->left=NULL;
		first->right=NULL;
		create = first;
	}
	else
		son(first,d);
}

node* Tree::son(node* tree, int d)
{
	if(tree==NULL)
	{
		node* temp;
		temp=new node;
		temp->data=d;
		temp->left=NULL;
		temp->right=NULL;
		return temp;
	}
	else if(d>(tree->data))
	{
		
		tree->right=son(tree->right,d);
	}
	else
	{
		tree->left=son(tree->left,d);
	}
}


void Tree::print()
{
	cout<<create->data<<" ";
	print_son(create->left);
	print_son(create->right);
	
}

bool Tree::print_son(node* tree)
{
	if(tree==NULL)
		return true;
	else
	{
		cout<<tree->data<<" ";
		print_son(tree->left);
		print_son(tree->right);
	}
}




int main(void)
{
	Tree one;
	one.add(3);
	one.add(0);
	one.add(5);
	one.print();
	getch();
}
но когда я вызываю one.add(3); one.add(0); one.add(1); one.print(); мне выводится 3 1 хотя по идее должен показать 3 0 1. заполняю значения правильно, в debug-режиме всё проверил, но правильно вывести никак не получается. прошу посмотрите пожалуйста фунцию print, что в ней не так? рекурсивно вызываю для каждого элемента? укажите на ошибку.
void Tree::print()
{
	cout<<create->data<<" ";
	print_son(create->left);
	print_son(create->right);
	
}

bool Tree::print_son(node* tree)
{
	if(tree==NULL)
		return true;
	else
	{
		cout<<tree->data<<" ";
		print_son(tree->left);
		print_son(tree->right);
	}
}
1 ответ

спасибо, я уже сам разобрался всё-таки поборол её... если кому пригодиться вот мой код
#include <iostream>
#include <conio.h>
using namespace std;

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

class Tree // наше деревцо
{
	// закрытые фунции, 
	node* first;
	void add(node* tree, int a); // добавление элемента в непустое дерево
	bool print_son(node* tree); // вывод элементов дерева
public:
	Tree() {first=NULL;}
	void create(int a); // создание дерева
	void print(); // вывод	
	// void found(int a);
};

void Tree::create(int a)
{
	if(first!=NULL)
		add(first,a);
	else
	{
		first=new node;
		first->data=a;
		first->left=first->right=NULL;
	}
}

void Tree::add(node* tree,int a)
{
	if(a<(tree->data))
	{
		if(tree->left!=NULL)
			add(tree->left,a);
		else
		{
			tree->left = new node;
			tree->left->data=a;
			tree->left->left=NULL;
			tree->left->right=NULL;
		}
	}
	else if(a>=(tree->data))
	{
		if(tree->right!=NULL)
			add(tree->right,a);
		else
		{
			tree->right = new node;
			tree->right->data=a;
			tree->right->left=NULL;
			tree->right->right=NULL;
		}
	}
}

void Tree::print()
{
	cout<<first->data<<" ";
	print_son(first->left);
	print_son(first->right);
}

bool Tree::print_son(node* tree)
{
	if(tree==NULL)
		return true;
	else
	{
		cout<<tree->data<<" ";
		print_son(tree->left);
		print_son(tree->right);
	}
}


int main(void)
{
	Tree one;
	one.create(3);
	one.create(0);
	one.create(1);
	one.create(5);
	one.print();
	getch();
}