#include "drzewo.h"
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  add
 *  Description:  Dodaje slowo 'word' do drzewa (galezi) wskazanego przez 'd' umieszczajac je
 *  w porzadku alfabetycznym. Wartoscia zwracana jest adres drzewa (wezla) po aktualizacji 
 *  jego zawartosci. 
 * =====================================================================================
 */
struct tree* add(tree *d,string word)
{
	tree *wezel=NULL;
	if(!d)
	{
		// tworzenie nowego wezla wezel;
		wezel = new tree;	
		wezel->word = word;
		wezel->count=1;
		wezel->left=wezel->right=NULL;
		return wezel;
	}
	if(d->word == word)      
	{
		d->count++;
		return d;
	}
	if(d->word > word) d->left=add(d->left,word);
	else d->right=add(d->right,word);

	return d;
}

/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  print
 *  Description: Wyswietla zawartosc drzewa (galezi) poczynajac od najbardziej skrajnego 
 *  lewego wezla do najdalszego wezla na prawo. Wyswietlana jest lista slow w porzadku 
 *  alfabetycznym i ilosc  wystapien slow w drzewie.
 * =====================================================================================
 */
void print(tree *d)
{
	if(!d) return ;
	print(d->left);
	cout.width(15);
	cout << d->word << " "  ;
	cout.width(5);
	cout << d->count << endl;
	print(d->right);
}


/* 
 * ===  FUNCTION  ======================================================================
 *         Name:  free_tree
 *  Description:  Usuwa z pamieci strukture drzewa.
 * =====================================================================================
 */
void free_tree(tree *d)
{
   if(d)
   {
      free_tree(d->left);
      d->left = NULL;

      free_tree(d->right);
	   d->right = NULL;

	   delete d;
   }
}
