1
struct BinaryNode { char ch; // 数据域 struct BinaryNode *lChild; //左子树 struct BinaryNode *rChild; //右子树 };
//拷贝树 2 struct BinaryNode * copyTree(struct BinaryNode * root) 3 { 4 if (root ==NULL) 5 { 6 return NULL; 7 } 8 9 //先拷贝 左子树 10 struct BinaryNode * lChild = copyTree(root->lChild); 11 12 //再拷贝 右子树 13 struct BinaryNode * rChild = copyTree(root->rChild); 14 15 //创建新的节点 16 struct BinaryNode * newNode = malloc(sizeof(struct BinaryNode)); 17 18 newNode->lChild = lChild; 19 newNode->rChild = rChild; 20 21 newNode->ch = root->ch; 22 23 return newNode; 24 25 }
此处用函数递归的方式对二叉树进行拷贝,从第四行代码开始分析此处if(root == NULL)限定了递归函数终止条件,而返回值为NULL是因为下面对二叉树叶的左右指向进行赋值。
第10和13行,创建了新的节点左子树和右子树,此两条语句用来遍历二叉树中所有的结点,并且接受新创建节点的地址。
从16行开始,进行创建一个新的节点,并对新的节点进行拷贝操作。然后将新节点的地址返回。