信管1172唐杰数据结构实验五

#include<iostream>

using namespace std;

#include<string>

struct node

{

string date;

node *lchild,*rchild,*parent;

};

class tree

{

public:

tree()

{

root=Creat(root);

}

~tree()

{

Release(root);

}

void PreOrder()

{

PreOrder(root);

cout<<endl;

}

void InOrder()

{

InOrder(root);

cout<<endl;

}

void PostOrder()

{

PostOrder(root);

cout<<endl;

}

void yezi()

{

yezi(root);

cout<<endl;

}

private:

node *root;

node *cyf;

string ch;

node * Creat(node *bt)

{

cout<<"请输入结点信息:";

cin>>ch;

if(ch=="#") bt=NULL;

else

{

cyf=bt;

bt=new node;

bt->parent=cyf;

    bt->date=ch;

bt->lchild=Creat(bt);

bt->rchild=Creat(bt);

}

return bt;

}

void Release(node *bt)

{

if(bt!=NULL)

{

Release(bt->lchild);

Release(bt->rchild);

delete bt;

}

}

void PreOrder(node *bt)

{

if(bt==NULL)

return;

else

{

cout<<bt->date;

if(bt->parent!=NULL&&bt!=root)

cout<<" parent:"<<bt->parent->date;

else

cout<<" 该结点无双亲 ";

if(bt->lchild!=NULL)

cout<<" lchild:"<<bt->lchild->date;

else

cout<<" 该结点无左孩子 ";

if(bt->rchild!=NULL)

cout<<" rchild:"<<bt->rchild->date<<endl;

else

cout<<" 该结点无右孩子 "<<endl;

PreOrder(bt->lchild);

PreOrder(bt->rchild);

}

}

void InOrder(node *bt)

{

if(bt==NULL)

return;

else

{

InOrder(bt->lchild);

cout<<bt->date;

if(bt->parent!=NULL&&bt!=root)

cout<<" parent:"<<bt->parent->date;

else

cout<<" 该结点无双亲 ";

if(bt->lchild!=NULL)

cout<<" lchild:"<<bt->lchild->date;

else

cout<<" 该结点无左孩子 ";

if(bt->rchild!=NULL)

cout<<" rchild:"<<bt->rchild->date<<endl;

else

cout<<" 该结点无右孩子 "<<endl;

InOrder(bt->rchild);

}

}

void PostOrder(node *bt)

{

if(bt==NULL)

return;

else

{

PostOrder(bt->lchild);

PostOrder(bt->rchild);

cout<<bt->date;

if(bt->parent!=NULL&&bt!=root)

cout<<" parent:"<<bt->parent->date;

else

cout<<" 该结点无双亲 ";

if(bt->lchild!=NULL)

cout<<" lchild:"<<bt->lchild->date;

else

cout<<" 该结点无左孩子 ";

if(bt->rchild!=NULL)

cout<<" rchild:"<<bt->rchild->date<<endl;

else

cout<<" 该结点无右孩子 "<<endl;

}

}

void yezi(node *bt)

{

if(bt==NULL)

return;

else

{

if(bt->lchild==NULL&&bt->rchild==NULL)

{

cout<<bt->date;

if(bt->parent!=NULL&&bt!=root)

cout<<" parent:"<<bt->parent->date;

else

cout<<" 该结点无双亲 ";

if(bt->lchild!=NULL)

cout<<" lchild:"<<bt->lchild->date;

else

cout<<" 该结点无左孩子 ";

if(bt->rchild!=NULL)

cout<<" rchild:"<<bt->rchild->date<<endl;

else

cout<<" 该结点无右孩子 "<<endl;

}

    yezi(bt->lchild);

yezi(bt->rchild);

}

}

};

int main()

{

tree a;

a.PreOrder();

a.InOrder();

a.PostOrder();

a.yezi();

return 0;

}

 

猜你喜欢

转载自blog.csdn.net/q1272211293/article/details/80623999