c语言创建两棵二叉树并判断是否相等
时间: 2023-11-10 18:06:21 浏览: 109
以下是C语言代码,用于创建两棵二叉树并判断它们是否相等:
```c
#include <stdio.h>
#include <stdlib.h>
// 二叉树结构体
struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
};
// 创建二叉树,返回根节点指针
struct TreeNode* createTree(int* nums, int n, int i) {
// 创建节点
if (i < n && nums[i] != -1) {
struct TreeNode* node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->val = nums[i];
node->left = createTree(nums, n, 2 * i + 1);
node->right = createTree(nums, n, 2 * i + 2);
return node;
}
return NULL;
}
// 判断两棵二叉树是否相等
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
// 如果两棵树都为空,则相等
if (p == NULL && q == NULL) {
return true;
}
// 如果只有一棵树为空,则不相等
else if (p == NULL || q == NULL) {
return false;
}
// 如果根节点的值不相等,则不相等
else if (p->val != q->val) {
return false;
}
// 递归判断左右子树是否相等
else {
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
}
int main() {
// 创建第一棵树
int nums1[] = {1, 2, 3, -1, -1, 4, 5};
int n1 = sizeof(nums1) / sizeof(int);
struct TreeNode* tree1 = createTree(nums1, n1, 0);
// 创建第二棵树
int nums2[] = {1, 2, 3, -1, -1, 4, 6};
int n2 = sizeof(nums2) / sizeof(int);
struct TreeNode* tree2 = createTree(nums2, n2, 0);
// 判断两棵树是否相等
bool sameTree = isSameTree(tree1, tree2);
if (sameTree) {
printf("两棵树相等\n");
} else {
printf("两棵树不相等\n");
}
return 0;
}
```
该代码创建了两棵二叉树,分别是`tree1`和`tree2`。然后,通过`isSameTree`函数判断这两棵树是否相等。在主函数中打印判断结果。
阅读全文