戳这里还有其他数据结构的题目噢
https://blog.csdn.net/qq_45724947/article/details/115625130?spm=1001.2014.3001.550
设计并验证如下算法:按中序序列建立两棵二叉树的二叉链表结构,判断两棵二叉树是否相等。
直接上代码:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define OK 1
#define ERROR 0
typedef int Status;
typedef char TElemType;
typedef struct BiTNode {
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
void InitBiTree(BiTree *BT) {//构造空二叉树
*BT = NULL;
}
//中序扩展序列递归建树
BiTree PreCreateBiTree(BiTree *BT) {
TElemType ch;
scanf("%c", &ch);
if(ch == '#') {
*BT = NULL;
}
else {
*BT = (BiTNode *)malloc(sizeof(BiTNode));
(*BT)->lchild = PreCreateBiTree(&((*BT)->lchild));
(*BT)->data = ch;
(*BT)->rchild = PreCreateBiTree(&((*BT)->rchild));
}
return *BT;
}
Status PreOrder(BiTree BT) { //先序遍历二叉树
if(BT) {
if(!(BT->data))
return ERROR;
printf("%c ", BT->data);
PreOrder(BT->lchild);
PreOrder(BT->rchild);
return OK;
}
}
bool judge(BiTree p,BiTree q)//判断相等
{
if(p==NULL && q==NULL) return true;
else if(p==NULL || q==NULL) return false;
else if( p->data != q->data ) return false;
return judge(p->lchild,q->lchild) && judge(p->rchild,q->rchild);
}
int main() {
BiTree a,b;
TElemType ch;
InitBiTree(&a);
InitBiTree(&b);
printf("请输入第一个二叉树:('#'结束)\n");
PreCreateBiTree(&a);
PreOrder(a);
printf("\n");
getchar();//读进去一个空格,使用getchar()缓冲
printf("请输入第二个二叉树:('#'结束)\n");
PreCreateBiTree(&b);
//printf("1");
PreOrder(b);
printf("\n");
if(judge(a,b))
printf("两个二叉树相等");
else
printf("两棵二叉树不相等");
return 0;
}
(代码如有雷同,可能存在借鉴他人部分代码情况)
(请不要直接复制使用。总结的代码仅供参考,希望读者借此代码自身可以理解学习)
如果代码对您有帮助,不要忘记评论收藏噢~