标签:先序遍历 复数 amp 它的 margin pop time name 例程
二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上全部结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上全部结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要推断两序列是否为同一二叉排序树
2 123456789 987654321 432156789 0
NO NO
建立二叉排序树。然后比較两个的先序遍历
#include <stdio.h> #include <string.h> #include <stdlib.h> struct node { int data; struct node *l,*r; }; int cnt; struct node *creat(struct node *&root,int a) { if(root==NULL) { root=(struct node *)malloc(sizeof(struct node)); root->l=NULL; root->r=NULL; root->data=a; } else { if(a<root->data) creat(root->l,a); else creat(root->r,a); } }; void qianxu(struct node *root,char *str) { if(root) { str[cnt++]=root->data; qianxu(root->l,str); qianxu(root->r,str); } } int main() { int n,i; char str1[20],str2[20]; while(~scanf("%d",&n)) { if(n==0) break; scanf("%s",str1); int len=strlen(str1); struct node *root=NULL; cnt=0; for(i=0;i<len;i++) { creat(root,str1[i]); } qianxu(root,str1); str1[cnt]='\0'; while(n--) { struct node *p=NULL; scanf("%s",str2); int len1=strlen(str2); cnt=0; for(i=0;i<len1;i++) { creat(p,str2[i]); } qianxu(p,str2); str2[cnt]='\0'; if(strcmp(str1,str2)==0) printf("YES\n"); else printf("NO\n"); } } return 0; }
标签:先序遍历 复数 amp 它的 margin pop time name 例程
原文地址:http://www.cnblogs.com/jhcelue/p/7140470.html