用C语言设计一个算法CopyTree,将二叉树b复制到二叉树t中
时间: 2024-03-01 21:29:06 浏览: 21
以下是用C语言设计的CopyTree算法实现:
```c
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode* copyTree(struct TreeNode* b) {
if (b == NULL) {
return NULL;
}
struct TreeNode* t = (struct TreeNode*) malloc(sizeof(struct TreeNode));
t->val = b->val;
t->left = copyTree(b->left);
t->right = copyTree(b->right);
return t;
}
int main() {
// 创建一个示例二叉树
struct TreeNode* b = (struct TreeNode*) malloc(sizeof(struct TreeNode));
b->val = 1;
b->left = (struct TreeNode*) malloc(sizeof(struct TreeNode));
b->left->val = 2;
b->left->left = NULL;
b->left->right = NULL;
b->right = (struct TreeNode*) malloc(sizeof(struct TreeNode));
b->right->val = 3;
b->right->left = (struct TreeNode*) malloc(sizeof(struct TreeNode));
b->right->left->val = 4;
b->right->left->left = NULL;
b->right->left->right = NULL;
b->right->right = NULL;
// 复制二叉树
struct TreeNode* t = copyTree(b);
// 打印复制后的二叉树
printf("%d\n", t->val);
printf("%d\n", t->left->val);
printf("%d\n", t->right->val);
printf("%d\n", t->right->left->val);
return 0;
}
```
代码中,我们首先定义了一个二叉树的结构体 `TreeNode`,包含节点的值 `val`,以及左右子节点的指针 `left` 和 `right`。然后我们实现了一个名为 `copyTree` 的递归函数,用于复制二叉树。递归函数的基本思想是,如果当前节点为空,则返回空指针;否则,创建一个新节点,将当前节点的值赋给新节点,然后递归复制左右子树,并将复制后的左右子树分别赋给新节点的左右子节点。最后,函数返回新节点的指针。在 `main` 函数中,我们首先创建一个示例二叉树 `b`,然后调用 `copyTree` 函数进行复制,并打印复制后的二叉树的值,以验证算法的正确性。