c语言实现:设计并验证如下算法:按中序序列建立两棵二叉树的二叉链表结构,判断两棵二叉树是否相等
时间: 2023-06-25 08:05:47 浏览: 126
数据结构与算法基础课程 C语言C++程序语言设计教程8_1集合与查找(静态查找、哈希、二叉排序树、平衡二叉树)共28页.pptx
以下是按中序序列建立二叉树的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
TreeNode* buildTree(int* inorder, int start, int end) {
if (start > end) {
return NULL;
}
int mid = start + (end - start) / 2;
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = inorder[mid];
root->left = buildTree(inorder, start, mid - 1);
root->right = buildTree(inorder, mid + 1, end);
return root;
}
int isEqual(TreeNode* p, TreeNode* q) {
if (p == NULL && q == NULL) {
return 1;
}
if (p == NULL || q == NULL) {
return 0;
}
return p->val == q->val && isEqual(p->left, q->left) && isEqual(p->right, q->right);
}
int main() {
int inorder[] = {1, 2, 3, 4, 5};
TreeNode* p = buildTree(inorder, 0, 4);
TreeNode* q = buildTree(inorder, 0, 4);
printf("%d\n", isEqual(p, q)); // output: 1
q->left->val = 6;
printf("%d\n", isEqual(p, q)); // output: 0
return 0;
}
```
首先,我们定义了一个二叉树节点 `TreeNode`,包含值 `val`,左右子节点指针 `left` 和 `right`。然后,我们实现了按中序序列建立二叉树的递归函数 `buildTree`,它接收中序序列 `inorder`,序列的起始下标 `start` 和结束下标 `end`,返回构建好的二叉树的根节点。具体实现方法是,每次取中间位置的值作为根节点 `val`,然后递归构建左右子树。最后,我们实现了判断两棵二叉树是否相等的函数 `isEqual`,它接收两棵二叉树的根节点指针 `p` 和 `q`,返回它们是否相等。具体实现方法是,如果两棵二叉树都为空,则相等;如果其中一棵为空,则不相等;否则,判断它们的根节点值是否相等,并递归判断左右子树是否相等。最后,我们在 `main` 函数中测试了这两个函数的正确性。
阅读全文