概述:
拷贝:先拷贝左子树,再拷贝右子树,最后拷贝根节点。
释放:先释放左子树,再释放右子树,最后释放根节点。
代码实现:
#include <iostream>
using namespace std;
struct Binary_Tree_Node
{
char data;
Binary_Tree_Node *lchild;
Binary_Tree_Node *rchild;
Binary_Tree_Node(char data,Binary_Tree_Node *lchild,Binary_Tree_Node *rchild);
};
Binary_Tree_Node::Binary_Tree_Node(char data,Binary_Tree_Node *lchild,Binary_Tree_Node *rchild)
{
this->data=data;
this->lchild=lchild;
this->rchild=rchild;
}
void traversal(Binary_Tree_Node *root)
{
if(root == NULL)
return;
//先序遍历
cout<<root->data;
traversal(root->lchild);
traversal(root->rchild);
}
Binary_Tree_Node* copyBinaryTree(Binary_Tree_Node *root)
{
if(root == NULL)
{
return NULL;
}
Binary_Tree_Node *lchild=copyBinaryTree(root->lchild);
Binary_Tree_Node *rchild=copyBinaryTree(root->rchild);
Binary_Tree_Node *newnode=new Binary_Tree_Node(root->data,lchild,rchild);
return newnode;
}
void freeBinaryTree(Binary_Tree_Node *root)
{
if(root == NULL)
{
return;
}
//释放左子树
freeBinaryTree(root->lchild);
//释放右子树
freeBinaryTree(root->rchild);
//释放本结点
delete root;
}
int main()
{
//创建结点
Binary_Tree_Node nodeA('A',NULL,NULL);
Binary_Tree_Node nodeB('B',NULL,NULL);
Binary_Tree_Node nodeC('C',NULL,NULL);
Binary_Tree_Node nodeD('D',NULL,NULL);
Binary_Tree_Node nodeE('E',NULL,NULL);
Binary_Tree_Node nodeF('F',NULL,NULL);
Binary_Tree_Node nodeG('G',NULL,NULL);
Binary_Tree_Node nodeH('H',NULL,NULL);
//创建树
nodeA.lchild=&nodeB;
nodeA.rchild=&nodeF;
nodeB.rchild=&nodeC;
nodeC.lchild=&nodeD;
nodeC.rchild=&nodeE;
nodeF.rchild=&nodeG;
nodeG.lchild=&nodeH;
Binary_Tree_Node *root=copyBinaryTree(&nodeA);
traversal(root);
freeBinaryTree(root);
return 0;
}
运行结果: