// file tree.cpp
// methods for class Tree
#include <assert.h>
#include <stdlib.h>
#include <iostream.h>
#include "tree.h"
Tree::Tree()
{
root
= NULL;
}
Tree::Tree(Type x)
{
root
= new Tnode;
assert(root);
root->setinfo(x);
}
void Tree::makeroot(Type x)
{
root
= new Tnode;
assert(root);
root->setinfo(x);
}
Tree::~Tree()
{
if
(isempty()) return;
clear(root);
}
void Tree::clear (Tnode *t)
{
if
(t==NULL) return;
clear(t->getleft());
clear(t->getright());
delete
t;
}
int Tree::isempty()
{
return
(root==NULL);
}
Tnode *Tree::getroot()
{
return
root;
}
Type Tree::getdata()
{
assert(root);
return
root->getinfo();
}
Tnode *Tree::getleft()
{
assert(root);
return
root->getleft();
}
Tnode *Tree::getright()
{
assert(root);
return
root->getright();
}
void Tree::setdata(Type x)
{
assert(root);
root->setinfo(x);
}
void Tree::insertleft(Tnode *p, Type x)
{
Tnode
*q;
assert(p);
assert(!(p->getleft()));
q
= new Tnode;
assert(q);
p->setleft(q);
q->setinfo(x);
}
void Tree::insertright(Tnode *p, Type x)
{
Tnode
*q;
assert(p);
assert(!(p->getright()));
q
= new Tnode;
assert(q);
p->setright(q);
q->setinfo(x);
}
void Tree::print(int mode)
{
assert(mode>=1
&& mode<=3);
if
(mode==1) pretrav();
if
(mode==2) intrav();
if
(mode==3) postrav();
}
void Tree::pretrav()
{
if
(isempty()) return;
pretrav(root);
cout<<endl<<endl;
}
void Tree::pretrav(Tnode *t)
{
if
(t==NULL) return;
cout<<t->getinfo()<<'
';
pretrav(t->getleft());
pretrav(t->getright());
}
void Tree::intrav()
{
if
(isempty()) return;
intrav(root);
cout<<endl<<endl;
}
void Tree::intrav(Tnode *t)
{
if
(t==NULL) return;
intrav(t->getleft());
cout<<t->getinfo()<<'
';
intrav(t->getright());
}
void Tree::postrav()
{
if
(isempty()) return;
postrav(root);
cout<<endl<<endl;
}
void Tree::postrav(Tnode *t)
{
if
(t==NULL) return;
postrav(t->getleft());
postrav(t->getright());
cout<<t->getinfo()<<'
';
}