#include<iostream>
#include<string>
struct feng //记录分数
{
int pshuxue;
int penglish;
int pchinese;
int count;
}total;
class stunode //子节点
{
private:
int id;
string name;
int shuxue;
int english;
int chinese;
stunode *left; //左节点
stunode *right; //右节点
public:
stunode(void); //构造函数
stunode(int sid,string sname,int sshuxue,int senglish,int schinese);
~stunode(void);
void insertleft(stunode* newnode);
void insertright(stunode* newnode);
stunode* returnleft(void);
stunode* returnright(void);
int getid(void);
void setname(string nwname)
{name=nwname;}
void setshuxue(int ssx){shuxue=ssx;}
void setenglish(int se){english=se;}
void setchinese(int sc){chinese=sc;}
friend void printnode(stunode* head); //打印学生分数
friend void pingchengji(stunode* head); //计算平均成绩
};
stunode::stunode(void)
{
left=NULL;
right=NULL;
}
stunode::stunode(int sid,string sname,int sshuxue,int senglish,int schinese)
{
id=sid;
name=sname;
shuxue=sshuxue;
english=senglish;
chinese=schinese;
left=NULL;
right=NULL;
}
stunode::~stunode(void)
{
left=NULL;
right=NULL;
}
void stunode::insertleft(stunode* newnode)
{
left=newnode;
}
void stunode::insertright(stunode* newnode)
{
right=newnode;
}
stunode* stunode::returnleft(void)
{
return left;
}
stunode* stunode::returnright(void)
{
return right;
}
int stunode::getid(void)
{
return id;
}
void printnode(stunode *head)
{
cout<<head->id<<" "<<head->name<<" "<<head->shuxue<<" "<<head->english<<" "<<head->chinese<<endl;
}
void pingchengji(stunode *head)
{
total.pshuxue=total.pshuxue+head->shuxue;
total.penglish=total.penglish+head->english;
total.pchinese=total.pchinese+head->chinese;
total.count=total.count+1;
}
class stutree //二叉树类
{
private:
stunode *root,*newnode,*currnode,*parent;
void print(stunode* temp);
void zonghe(stunode* temp);
int ischild(stunode* pnode,stunode* childnode);
stunode* findnode(const int rid,stunode*& parentnode);
public:
stutree(void);
void creattree(stunode *node);
void prints(void);
stunode* findnode(const int rid);
void insertnode(stunode* temp);
void pingjun(void);
stunode* deletenode(int did);
void deletetree(stunode* temp);
~stutree(void);
};
stutree::stutree(void)
{
root=NULL;
newnode=NULL;