【问题描述】用c语言判断两棵二叉树是否结构相同。结构相同意味着对应的左子树和对应的右子树都 结构相同,不考虑数据内容。若已知两棵二叉树 B1 和 B2 皆为空, 或者皆不空且 B1 的左、右子 树和 B2 的左、右子树分别结构相同, 则称二叉树 B1 和 B2 结构相同。 【实验要求】 二叉树采用二叉链表存储,二叉链表定义如下: typedef char ElemType; typedef struct bitnode{ //定义二叉树节点结构 ElemType data; //数据域 struct bitnode *lchild,*rchild; //左右孩子指针域 }BiTNode,*BiTree; 【测试界面】 请输入(在空子树处添加*)二叉树 A 的先序序列: ABD*F***CE*** 请输入(在空子树处添加*)二叉树 B 的先序序列: MNA*B***FD*** [输出] 结构相同
时间: 2023-07-23 13:18:29 浏览: 84
以下是判断两棵二叉树是否结构相同的 C 代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct bitnode {
ElemType data;
struct bitnode *lchild, *rchild;
} BiTNode, *BiTree;
// 创建二叉树
void createBiTree(BiTree *T) {
char c;
scanf("%c", &c);
if (c == '*') {
*T = NULL;
} else {
*T = (BiTree) malloc(sizeof(BiTNode));
(*T)->data = c;
createBiTree(&(*T)->lchild);
createBiTree(&(*T)->rchild);
}
}
// 判断两棵二叉树是否结构相同
int isSameStructure(BiTree T1, BiTree T2) {
if (T1 == NULL && T2 == NULL) {
return 1;
} else if (T1 == NULL || T2 == NULL) {
return 0;
} else {
int leftSame = isSameStructure(T1->lchild, T2->lchild);
int rightSame = isSameStructure(T1->rchild, T2->rchild);
return leftSame && rightSame;
}
}
int main() {
BiTree T1 = NULL, T2 = NULL;
printf("请输入(在空子树处添加*)二叉树 A 的先序序列:");
createBiTree(&T1);
getchar(); // 读取多余的回车符
printf("请输入(在空子树处添加*)二叉树 B 的先序序列:");
createBiTree(&T2);
if (isSameStructure(T1, T2)) {
printf("结构相同\n");
} else {
printf("结构不同\n");
}
return 0;
}
```
运行程序后,输入两棵二叉树的先序序列(在空子树处添加 *),程序会输出结构相同或结构不同。
阅读全文