思路:对输入的数字序列构建二叉排序树,分别进行先序遍历和中序遍历(唯一构成一个二叉树)。比较两个序列的前序遍历和中序遍历是否相同,相同则是同一颗二叉搜索树。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>///记得加上.h
using namespace std;
typedef struct BiNode
{
char data;
struct BiNode *lchild,*rchild;
}BiNode,*BiTree;
void pre_order (BiTree T,char pre_array[],int &index)///先序遍历内部函数index是数组下标,因为递归时需要改变,
{ ///index必须使用引用型。
if(T!=NULL)
{
pre_array[index++]=T->data;
pre_order(T->lchild,pre_array,index);
pre_order(T->rchild,pre_array,index);
}
}
void Pre_order(BiTree T,char pre_array[])///先序遍历
{
int index=0;
pre_order(T,pre_array,index);
pre_array[index]='\0';//遍历结束后,在字符串数组最后加入结束符,便于使用字符串函数。
}
void in_order(BiTree T,char in_array[],int &index)
{
if(T!=NULL)
{
in_order(T->lchild,in_array,index);
in_array[index++]=T->data;
in_order(T->rchild,in_array,index);
}
}
void In_order(BiTree T,char in_array[])
{
int index=0;
in_order(T,in_array,index);
in_array[index]='\0';
}
int insertBST (BiTree &T,char key)
{
if(T==NULL)
{
T=(BiNode*)malloc(sizeof(BiNode));
T->lchild=NULL;
T->rchild=NULL;
T->data=key;
return 1;
}
else
{
if(key==T->data)
{
return 0;
}
else if(T->data>key)
{
return insertBST(T->lchild,key);
}
else if(T->data<key)
{
return insertBST(T->rchild,key);
}
}
}
void *CreatBiSTree (BiTree &T,char key[],int n)
{
int i;
T=NULL;
for(i=0;i<n;i++)
{
insertBST(T,key[i]);
}
}
char init[11];///初始序列
char cmp[11];///需比较序列
char pre_array1[11],pre_array2[11];
char in_array1[11],in_array2[11];
int main()
{
BiNode *T1;///初始排序树
BiNode *T2;///比较序列排序树
int n;
while(scanf("%d",&n)!=EOF && n!=0)
{
scanf("%s",init);
CreatBiSTree(T1,init,strlen(init));
Pre_order(T1,pre_array1);
In_order(T1,in_array1);
while(n--)///结束条件:比较完n组序列
{
scanf("%s",cmp);
CreatBiSTree(T2,cmp,strlen(cmp));
Pre_order(T2,pre_array2);
In_order(T2,in_array2);
int flag;
flag=strcmp(pre_array1,pre_array2) || strcmp(in_array1,in_array2);
if(flag==0)
{
printf("YES!\n");
}
else
{
printf("NO!\n");
}
}
}
return 0;
}
方法:将输入的序列存入两个字符型数组中,以此构建二叉排序树。再分别将其前序与中序遍历序列存入pre_array[]和in_array[]中,利用strcmp函数比较是否相同。
strcmp
C/C++函数,比较两个字符串
设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。