c语言写 给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。
时间: 2024-09-15 11:03:50 浏览: 46
C++基于递归和非递归算法判定两个二叉树结构是否完全相同(结构和数据都相同)
5星 · 资源好评率100%
在C语言中,你可以通过递归的方式来检查两个二叉树是否相同。这里有一个简单的函数`isSameTree`作为示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 辅助函数,用于比较两个节点是否相等
int areNodesEqual(TreeNode* node1, TreeNode* node2) {
if (node1 == NULL && node2 == NULL)
return 1; // 都为空则相等
if (node1 == NULL || node2 == NULL)
return 0; // 只有一个为空,则不相等
return node1->val == node2->val && areNodesEqual(node1->left, node2->left) && areNodesEqual(node1->right, node2->right);
}
// 主函数,检查两棵树是否相同
int isSameTree(TreeNode* root1, TreeNode* root2) {
return areNodesEqual(root1, root2);
}
// 测试函数
void printTree(TreeNode* node) {
if (node != NULL) {
printf("%d ", node->val);
printTree(node->left);
printTree(node->right);
}
}
int main() {
// 创建并测试两个二叉树示例
TreeNode* tree1 = (TreeNode*)malloc(sizeof(TreeNode));
tree1->val = 1;
tree1->left = (TreeNode*)malloc(sizeof(TreeNode));
tree1->left->val = 2;
tree1->right = (TreeNode*)malloc(sizeof(TreeNode));
tree1->right->val = 3;
TreeNode* tree2 = (TreeNode*)malloc(sizeof(TreeNode));
tree2->val = 1;
tree2->left = (TreeNode*)malloc(sizeof(TreeNode));
tree2->left->val = 2;
tree2->right = (TreeNode*)malloc(sizeof(TreeNode));
tree2->right->val = 3;
printf("Is tree1 and tree2 the same? %s\n", isSameTree(tree1, tree2) ? "Yes" : "No");
// 打印两棵树以便观察
printTree(tree1);
printTree(tree2);
free(tree1);
free(tree2);
return 0;
}
```
在这个例子中,`isSameTree`函数首先检查根节点是否相同,然后递归地比较每个节点及其子节点。如果整个结构和所有节点的值都匹配,那么就认为这两个树相同。
阅读全文