二叉树——判断两棵二叉树是否相等(先序和中序遍历序列建立二叉树)
来源:互联网 发布:淘宝收货延迟多长时间 编辑:程序博客网 时间:2024/06/06 01:47
需求:
利用先序遍历序列和中序遍历序列来建立两棵二叉树,并判断是否相等
需要先将创建二叉树
创建的方法是将该二叉树的先序的序列和中序的序列分别存储到Pre数组和Mid数组中,它们的存储顺序如下:
判断两棵树是否相等
采用递归的方法,用先序,中序,后序遍历的方法对两棵树每个数据判断是否相等
- 两棵树都为空,返回1
- 两棵树不相等,返回0
- 两棵树相等,返回1
代码解析及代码如下:
#include <stdio.h>#include <string.h>typedef char TElemType;////存储先序和中序序列字符数组char Pre[100],Mid[100];typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//创建二叉树//Pre_star.....代表数组下标BiTree BiTree_Creat(BiTree T,int Pre_start,int Pre_end,int Mid_start,int Mid_end){ int i; int LtreeLen,RtreeLen; T=(BiTree)malloc(sizeof(BiTNode)); if(!T) { printf("malloc_error!"); } //////先序很容易找到根结点,中序的话需要遍历 T->data=Pre[Pre_start];//取先序序列中第一个字符作为根结点的数据域值 //////查找中序序列中的根结点 for(i=Mid_start;Mid[i]!=T->data;) { ++i;////根结点在序列i位置 } ////计算左右子树结点个数 LtreeLen=i-Mid_start; RtreeLen=Mid_end-i; if(LtreeLen)////不断深入左子树 { T->lchild=BiTree_Creat(T,Pre_start+1,Pre_start+LtreeLen,Mid_start,Mid_start+LtreeLen-1); } else { T->lchild=NULL; } if(RtreeLen)////不断深入右子树 { T->rchild=BiTree_Creat(T,Pre_end-RtreeLen+1,Pre_end,Mid_end-RtreeLen+1,Mid_end); } else { T->rchild=NULL; } return T;}////先序判断两树是否相等int Pre_Cmp(BiTree T1,BiTree T2){ //如果两树都为空,返回1 if(!T1&&!T2) { return 1; } if(T1&&T1) { if(T1->data==T2->data) { if(Pre_Cmp(T1->lchild,T2->lchild))//递归左子树每个数据是否相等 { if(Pre_Cmp(T1->rchild,T2->rchild))//递归右子树每个数据是否相等 { return 1;//两树完全相等,返回1 } } } } return 0;//两树不相等,返回0}////中序判断两树是否相等int In_Cmp(BiTree T1,BiTree T2){ if(!T1&&!T2) { return 1; } if(T1&&T2) { if(In_Cmp(T1->lchild,T2->lchild)) { if(T1->data==T2->data) { if(In_Cmp(T1->rchild,T2->rchild)) { return 1; } } } } return 0;}////后序判断两树是否相等int Last_Cmp(BiTree T1,BiTree T2){ if(!T1&&!T2) { return 1; } if(T1&&T2) { if(Last_Cmp(T1->lchild,T2->lchild)) { if(T1->rchild,T2->rchild) { if(T1->data==T2->data) { return 1; } } } } return 0;}int main(){ BiTree T1,T2; int Is_Bitree; int ch; strcpy(Pre,"abcde");//先序顺序 strcpy(Mid,"bdcae");//中序顺序 T1=BiTree_Creat(T1,0,4,0,4); T2=BiTree_Creat(T2,0,4,0,4); while(1) { printf("***///T1T2相等或都为空则输出1,否则反之///***\n\n"); printf("1_Pre_Cmp\n"); printf("2_In_Cmp\n"); printf("3_Last_Cmp\n"); printf("4_exit\n"); scanf("%d",&ch); switch(ch) { case 1:Is_Bitree=Pre_Cmp(T1,T2);printf("%d",Is_Bitree);break; case 2:Is_Bitree=In_Cmp(T1,T2);printf("%d",Is_Bitree);break; case 3:Is_Bitree=Last_Cmp(T1,T2);printf("%d",Is_Bitree);break; case 4:return; default:printf("input error!"); } printf("\n"); } return 0;}
阅读全文
0 0
- 二叉树——判断两棵二叉树是否相等(先序和中序遍历序列建立二叉树)
- 二叉树(二) 求二叉树高度,根据先序和中序构建二叉树,判断二叉树是否是完全二叉树,判断两棵树是否相等
- (十)先序序列建立和遍历二叉树
- 判断两棵二叉树是否相等
- 判断两棵二叉树是否相等
- 判断两棵二叉树是否相等
- 判断两棵二叉树是否相等
- 判断两棵二叉树是否相等
- 判断两棵二叉树是否相等
- 由先序和中序序列建立二叉树
- 根据二叉树的先序遍历和中序遍历建立二叉树
- 二叉树相关操作(先序建立二叉树、求子节点数量,判断是否为平衡二叉树,先序遍历,中序遍历,后序遍历)
- 由先序和中序遍历序列建立二叉树
- 判断两颗二叉树是否相等
- 先序序列建立二叉树
- 根据二叉树的先序遍历建立二叉树
- 建立二叉树(已知中序遍历和先序遍历)
- 先序扩展序列建立二叉树;先序、中序、后序遍历的递归算法(树)
- 第10章 中间件
- ZOJ 3537 Cake 计算几何+区间dp
- Qt样式表 学习总结
- 【期望DP】HDU3853 LOOPS
- caffe dilation 空洞卷积
- 二叉树——判断两棵二叉树是否相等(先序和中序遍历序列建立二叉树)
- Java基础——数据类型和运算符
- ftp协议,文件传输的一抹色彩
- KCF详解
- [ARM-Linux]Linux-MATLAB安装
- matlab的findobj函数
- 沧田TS618K打印机驱动官方版下载
- 【hdu 1863】 畅通工程
- C/C++使用NotePad++DIY一个IDE