标签:二叉树
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树
2 123456789 987654321 432156789 0
NO NO
依旧是二叉排序树。。定义都没变 然后判断两颗树是否为同一二叉排序树,我是直接dfs一种先序遍历然后看两颗树的先序遍历是否相同。。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <string>
#include <cctype>
#include <vector>
#include <cstdio>
#include <cmath>
#include <deque>
#include <stack>
#include <map>
#include <set>
#define ll long long
#define maxn 1010
#define pp pair<int,int>
#define INF 0x3f3f3f3f
#define max(x,y) ( ((x) > (y)) ? (x) : (y) )
#define min(x,y) ( ((x) > (y)) ? (y) : (x) )
using namespace std;
typedef struct node
{
char d;
node *l,*r;
}*p;
int n,sb;
void Insert(p &T,int x)
{
if(T==NULL)
{
T=new node;
T->l=NULL;T->r=NULL;
T->d=x;
}
else
{
if(x<T->d)
Insert(T->l,x);
else
Insert(T->r,x);
}
}
void dfs(p T,char *ans)
{
if(T)
{
ans[sb++]=T->d;
dfs(T->l,ans);
dfs(T->r,ans);
}
}
int main()
{
while(~scanf("%d",&n)&&n)
{
p root=NULL;
char tem[12],ans[12];
scanf("%s",tem);
for(int i=0;i<strlen(tem);i++)
Insert(root,tem[i]);
sb=0;dfs(root,ans);ans[sb]='\0';
while(n--)
{
p troot=NULL;
scanf("%s",tem);
for(int i=0;i<strlen(tem);i++)
Insert(troot,tem[i]);
sb=0;dfs(troot,tem);tem[sb]='\0';
if(!strcmp(ans,tem))
puts("YES");
else
puts("NO");
}
}
return 0;
}
标签:二叉树
原文地址:http://blog.csdn.net/qq_16255321/article/details/41090661