拷贝二叉树,就是要拷贝根节点,叶子节点,第一步得先分配一个空间给根节点, BiTNode* newnode = (BiTNode*)malloc(sizeof(BiTNode));将其叶子节点指向NULL,在判断原树的根节点的左节点和右节点是否为空,不为空就得复制过去,利用迭代就很容易做到。最后将新的子节点和根节点链接起来。
typedef struct BiTNode
{
int data;
struct BiTNode* lchild, *rchild;
}BiTNode;
BiTNode* CopyTree(BiTNode *root)
{
if (root == NULL)
{
return NULL;
}
BiTNode* newnode = (BiTNode*)malloc(sizeof(BiTNode));
BiTNode* newlc = NULL;
BiTNode* newrc = NULL;
newnode->data = root->data;//拷贝根节点
if (root->lchild != NULL)
{
//拷贝左子树
newlc = CopyTree(root->lchild);
}
else
{
newlc = NULL;
}
if (root->rchild != NULL)
{
//拷贝右子树
newrc = CopyTree(root->rchild);
}
else
{
newrc = NULL;
}
newnode->lchild = newlc;
newnode->rchild = newrc;
return newnode;
}
void main()
{
BiTNode t1, t2, t3, t4, t5;
memset(&t1, 0, sizeof(BiTNode));
memset(&t2, 0, sizeof(BiTNode));
memset(&t3, 0, sizeof(BiTNode));
memset(&t4, 0, sizeof(BiTNode));
memset(&t5, 0, sizeof(BiTNode));
t1.data = 1;
t2.data = 2;
t3.data = 3;
t4.data = 4;
t5.data = 5;
t1.lchild = &t2;
t1.rchild = &t3;
t2.rchild = &t4;
t3.lchild = &t5;
inOrder(&t1);
printf("\n");
BiTNode *newn=CopyTree(&t1);
inOrder(newn);
system("pause");
}