二叉排序树

来源:互联网 发布:java else 编辑:程序博客网 时间:2024/05/23 23:30

Problem Description

二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树

Input

开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树)

Output

 

Example Input

21234567899876543214321567890

Example Output

NONO
/*思路是,输入第一个序列,按照此序列建二叉排序树存储按照这个序列建树的先序序列。输入要判断的序列,建树,存储先序序列。进行字符串的比较。*/#include <iostream>#include <string.h>#include <stdlib.h>using namespace std;typedef struct tree{    char data;    tree *lc, *rc;} BiTree;void Add(BiTree *T, char x)  //在二叉排序树中插入节点{    BiTree *p;    if(T->data > x)   //x小于T->data则放在T左边    {        if(T->lc == NULL)  //判断T的左子树是否存在,不存在直接插入。存在进行递归        {            p = (BiTree*)malloc(sizeof(BiTree));            p->data = x;            p->lc = p->rc = NULL;            T->lc = p;        }        else            Add(T->lc, x);    }    else    {        if(T->rc == NULL)        {            p = (BiTree*)malloc(sizeof(BiTree));            p->data = x;            p->lc = p->rc = NULL;            T->rc = p;        }        else            Add(T->rc, x);    }}BiTree *Creat(char s[])   //建立二叉排序树{    int n, i;    n = strlen(s);    BiTree *head;    head = (BiTree*)malloc(sizeof(BiTree));    head->data = s[0];    head->lc = head->rc = NULL;    for(i = 1; i < n; i++)        Add(head, s[i]);    return head;}char a[20], b[20];      //输入的序列和要判断的序列char s1[20], s2[20];    //两个字符串用来存储先序序列int i;void Save1(BiTree *T){    if(T)    {        s1[i++] = T->data;        Save1(T->lc);        Save1(T->rc);    }}void Save2(BiTree *T){    if(T)    {        s2[i++] = T->data;        Save2(T->lc);        Save2(T->rc);    }}int main(){    int n;    BiTree *T;    while(cin >> n && n != 0)    {        cin >> a;        T = Creat(a);        i = 0;        Save1(T);        s1[i] = '\0';        while(n--)        {            cin >> b;            T = Creat(b);            i = 0;            Save2(T);            s2[i] = '\0';            if(strcmp(s1, s2) == 0)                cout << "YES" << endl;            else                cout << "NO" << endl;        }    }    return 0;}
原创粉丝点击