以二叉链表为存储结构,写一个拷贝二叉树的算法:
voidCopyTree(BinTreeroot,Bin.Tree*newroot)
其中新树的结点是动态申请的,为什么newroot要说明为BinTree型指针?
因为调用函数只能进行值传递,当返回类型为void时,就必须把实际参数的地址传给函数,否则函数不会对实际参数进行任何操作,也就得不到所需结果了。所以,newroot要说明为BinTree型指针。 void CopyTree(BinTree root,BinTree*newroot) { //拷贝二叉树 if(root) //如果结点非空 { //按前序序列拷贝 *newroot=(BinTNode*)malloc(sizeof(Bi nTNode)); //生成新结点 (*newroot)一>data=root一>data; //拷贝结点数据 CopyTree(root—>lchild,&(*newroot)一>lchild); //拷贝左子树 CopyTree(root—>rchild,&(*newroot)一>rchild); //拷贝右子树 } else //如果结点为空 *newroot=NULL; //将结点置空 }