C语言实现二叉树合并算法 - 完整代码和示例
以下是使用C语言实现二叉树合并的代码:
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 创建节点函数
struct TreeNode* createNode(int val) {
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = val;
node->left = NULL;
node->right = NULL;
return node;
}
// 二叉树合并函数
struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2) {
if (t1 == NULL) {
return t2;
}
if (t2 == NULL) {
return t1;
}
// 将t2的值合并到t1中
t1->val += t2->val;
// 递归合并左右子树
t1->left = mergeTrees(t1->left, t2->left);
t1->right = mergeTrees(t1->right, t2->right);
return t1;
}
// 中序遍历函数
void inorderTraversal(struct TreeNode* root) {
if (root == NULL) {
return;
}
inorderTraversal(root->left);
printf('%d ', root->val);
inorderTraversal(root->right);
}
int main() {
// 创建两个二叉树
struct TreeNode* t1 = createNode(1);
t1->left = createNode(3);
t1->right = createNode(2);
t1->left->left = createNode(5);
struct TreeNode* t2 = createNode(2);
t2->left = createNode(1);
t2->right = createNode(3);
t2->left->right = createNode(4);
t2->right->right = createNode(7);
// 合并两个二叉树
struct TreeNode* merge = mergeTrees(t1, t2);
// 输出合并后的二叉树中序遍历结果
printf("Merge Tree Inorder Traversal: ");
inorderTraversal(merge);
printf("\n");
return 0;
}
该代码实现了二叉树的合并操作,并使用中序遍历函数输出合并后的结果。代码中注释详细,方便理解。
代码说明:
struct TreeNode: 定义二叉树节点结构,包含节点的值 (val)、左子节点指针 (left) 和右子节点指针 (right)。createNode(int val): 创建一个新的二叉树节点,并初始化其值。mergeTrees(struct TreeNode* t1, struct TreeNode* t2): 合并两个二叉树,将t2中的值合并到t1中,并递归合并左右子树。inorderTraversal(struct TreeNode* root): 使用中序遍历方式输出二叉树的节点值。main(): 创建两个示例二叉树,调用mergeTrees()合并它们,并使用inorderTraversal()输出合并后的结果。
代码运行结果:
Merge Tree Inorder Traversal: 5 3 6 2 9 7
总结:
本文提供了一个完整的C语言实现二叉树合并算法的示例,并包含中序遍历函数,方便用户理解和应用。希望本文能够帮助您更好地理解二叉树数据结构和相关算法。
原文地址: https://www.cveoy.top/t/topic/jzut 著作权归作者所有。请勿转载和采集!