若二叉树中带有指向父节点指针,则二叉树的拷贝算法需要使用后续遍历,代码如下:
struct Node {
int data;
Node* lchild; //左孩子指针
Node* rchild; //右孩子指针
Node* parent; //父节点指针
};
Node* copy(Node *p)//拷贝二叉树函数
{
if (NULL == p)
return NULL;
else
{
Node* lchild1 = copy(p->lchild); //递归拷贝当前结点的左孩子结点
Node* rchild1 = copy(p->rchild); //递归拷贝当前结点的右孩子结点
Node* q = (Node*)malloc(sizeof(Node));
q->lchild = lchild1;
q->rchild = rchild1;
if(NULL != lchild1)
lchild1->parent = q; //若当前结点不是叶子节点,则将左孩子的父节点指针指向当前结点
if(NULL != rchild1)
rchild1->parent = q; //若当前结点不是叶子节点,则将右孩子的父节点指针指向当前结点
return q;
}
若上述代码有不正之处,欢迎大佬指点迷津,感激不尽