今天老师讲了二叉树,上课听得各种听不懂呀,各种递归呀,木有办法啦。。下课自己敲来实践~\(≧▽≦)/~。。。。应了一句话人笨就要多练习。。。
void Copytree(bitPtr t,bitPtr &nt)//复制一个树
{
if(!t) return 0;
else{
nt=new node;
nt->date=t->date;
Copttree(t->lc,nt->lc);
Copytree(t->rc,nt->lc);
}
}
int Sum(bitPtr t)//求各节点的和
{
if(!t) return 0;
else
return t->date+Sum(t->lc)+Sum(t->rc);
}
void max(bitPtr t,bitptr &maxt)//求最大的节点
{
maxt=t;
porder(t,maxt);
}
void porder(bitPtr t,bitPtr &mat)
{
if(t)
{
if(t->date>mt->date) mt=t;
porder(t->lc,mt);
porder(t->rc,mt);
}
}
void visit(bitPtr t,int &m,int &n)
{
if(t)
{
if(t->date>0) m=m+t.date;
else n=n+t.date;
visit(t->lc,m,n);
visit(t->rc,m.n)'
}
}
int Mul(bitPtr t)//求正、负整数结点值之和的积:
{
m=n=0;
visit(t,m,n);
return m*n;
}
void Outtree(bitPtr t)//遍历输出各层节点值
{ if(t)
{
count<<n<<:t->date<<' ';
OutTree(t->lc,n+1);
OutTree(t->rc,n+1);
}
}
void high(bitPtr t,int level,int &hi)
//level的初值是1,hi的初值是0
{
if(t)
{
if(level>hi) hi=level;
high(t->lc,level+1,hi);
high(t->rc,level+1,hi);
}
}
void Gethigh(bitPtr tint n,int &high,ar p,ar &path)
//n的初值是1,high的初值是o
{
if(t){
p[n]=t->date;
if(high<n) high=n;
for(i=1;i<=n;i++) path[i]=p[i];
}
GetHigh(t->lc,n+1,high,p,path);
GetHigh(t->rc,n+1,high,p,path);
}
int high(bitPtr t)
{
if(!t) return 0;
else{
m=high(t->lc);
n=high(t->rc);
}
return m>n? m+1:n+1;
}
int sum(bitPtr t) //二叉树结点的值为整数,求叶子结点值之和:
{
if(!t) return 0; else
if(!t->lc&&!t->rc) return t->date; else
return Sum(t->lc)+Sum(t->rc);
}
}