void addmytrees(tree **t,tree **r)
{
if(*r==NULL)
return;//r为空,直接结束,不做处理。
if(*t!=NULL)
(*t)->data1=(*t)->data1+(*r)->data1;//t不为空,两结点相加。
else
*t=*r;//t若为空,将r交给t实现嫁接。
for(int i=0; i<M; i++)
addmytrees(&((*t)->child[i]),&((*r)->child[i]));//对对应的孩子进行处理。
}
话不多说,先上代码。
对于两棵有序树的相加,我们可以以其中的一棵树作为研究对象,通过另一树的“嫁接”来拼凑成一棵合成树。
嫁接的过程可以看成枝的转移。
我们可以比较每两个结点的情况,一共有4种。假设两棵树分别为t,r。
r为空树
若r为空,t不需要改造,直接return。
r不为空
t为空
把r嫁接给t,*t=*r。
t不为空
两个结点的值做相加,并将结果给t。
注意:该操作要改变指针值,故要用双指针。