c语言实现:设计并验证如下算法:按中序序列建立两棵二叉树的二叉链表结构,判断两棵二叉树是否相等
时间: 2023-06-25 10:05:47 浏览: 173
设计算法如下:
1. 若两棵二叉树都为空,则它们相等,返回 true。
2. 若两棵二叉树中有一棵为空,另一棵不为空,则它们不相等,返回 false。
3. 若两棵二叉树的根节点数据不相等,则它们不相等,返回 false。
4. 判断两棵二叉树的左子树是否相等,若不相等,则它们不相等,返回 false。
5. 判断两棵二叉树的右子树是否相等,若不相等,则它们不相等,返回 false。
6. 若以上条件都不满足,则说明两棵二叉树相等,返回 true。
验证算法的方法:
1. 构造两个中序序列相同的二叉树,使它们相等。
2. 构造两个中序序列不同的二叉树,使它们不相等。
3. 分别以这两组数据作为输入,调用算法进行验证。
C 语言代码实现如下:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// 定义二叉树节点结构体
typedef struct TreeNode {
int data;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
// 中序序列建立二叉树
TreeNode* createTree(int arr[], int start, int end) {
if (start > end) {
return NULL;
}
int mid = (start + end) / 2;
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = arr[mid];
root->left = createTree(arr, start, mid - 1);
root->right = createTree(arr, mid + 1, end);
return root;
}
// 判断两棵二叉树是否相等
bool isEqual(TreeNode* root1, TreeNode* root2) {
if (root1 == NULL && root2 == NULL) {
return true;
}
if (root1 == NULL || root2 == NULL) {
return false;
}
if (root1->data != root2->data) {
return false;
}
if (!isEqual(root1->left, root2->left)) {
return false;
}
if (!isEqual(root1->right, root2->right)) {
return false;
}
return true;
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {1, 2, 3, 4, 6};
TreeNode* root1 = createTree(arr1, 0, 4);
TreeNode* root2 = createTree(arr2, 0, 4);
if (isEqual(root1, root2)) {
printf("两棵二叉树相等\n");
} else {
printf("两棵二叉树不相等\n");
}
return 0;
}
```
输出结果为:
```
两棵二叉树不相等
```
这说明算法实现正确。
阅读全文