判断两个二叉树是否相等,用C语言代码
时间: 2024-09-15 22:04:21 浏览: 44
判断两颗二叉树是否相似的两种方法
判断两个二叉树是否相等,主要是指结构上完全相同,节点的值也相等。可以通过递归的方法来比较两个二叉树。以下是用C语言实现的一个示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树节点结构体
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
// 辅助函数,用于判断两个二叉树是否相等
int isSameTree(struct TreeNode* p, struct TreeNode* q) {
// 如果两个节点都为空,则相等
if (p == NULL && q == NULL) {
return 1;
}
// 如果其中一个节点为空,则不相等
if (p == NULL || q == NULL) {
return 0;
}
// 如果两个节点的值不相等,则不相等
if (p->val != q->val) {
return 0;
}
// 递归判断左右子树是否相等
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
// 示例函数,创建新的二叉树节点
struct TreeNode* newTreeNode(int value) {
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = value;
node->left = NULL;
node->right = NULL;
return node;
}
// 示例使用
int main() {
struct TreeNode* tree1 = newTreeNode(1);
tree1->left = newTreeNode(2);
tree1->right = newTreeNode(3);
struct TreeNode* tree2 = newTreeNode(1);
tree2->left = newTreeNode(2);
tree2->right = newTreeNode(3);
if (isSameTree(tree1, tree2)) {
printf("两个二叉树相等。\n");
} else {
printf("两个二叉树不相等。\n");
}
// 释放分配的内存(略)
return 0;
}
```
这段代码定义了一个`TreeNode`结构体来表示二叉树的节点,并提供了一个`isSameTree`函数来递归地比较两个二叉树是否相等。如果两个树的所有节点都相等,则返回1表示相等,否则返回0表示不相等。在`main`函数中,我们创建了两个简单的二叉树,并调用`isSameTree`函数来判断它们是否相等。
阅读全文