题目1009:二叉搜索树

来源:互联网 发布:java split分割字符串 编辑:程序博客网 时间:2024/06/05 22:45
题目描述:
判断两序列是否为同一二叉搜索树序列
输入:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出:

如果序列相同则输出YES,否则输出NO

样例输入:
25674325432675763420
样例输出:
YESNO
思路很简单,重建树判断是否一致
#include<iostream>#include<string>using namespace std; typedef struct node{    node *left;    node *right;    char c;}*tree; void creat(tree *p,string &s){    int n=s.length();    for(int i=0;i<n;++i)    {        tree temp=*p;        tree pre=NULL;        tree te=new node();        te->c=s[i];        te->left=NULL;        te->right=NULL;            while(temp)            {                pre=temp;                if(temp->c>s[i])                    temp=temp->left;                else                    temp=temp->right;            }            if(pre==NULL)                *p=te;            else if(pre->c>s[i])                pre->left=te;            else                pre->right=te;    }} void pre(tree p,string &s){    if(p)    {        s+=p->c;        pre(p->left,s);        pre(p->right,s);    }} int main(){    tree t=NULL;    string s1,s2;    int n;    while(cin>>n,n)    {    cin>>s1;    t=NULL;    creat(&t,s1);    s1="";    pre(t,s1);    while(n--)    {        cin>>s2;        t=NULL;        creat(&t,s2);        s2="";        pre(t,s2);        if(s1==s2)            cout<<"YES\n";        else            cout<<"NO\n";        //s2.clear();    }    //s1.clear();    }}


原创粉丝点击