二叉搜索树是否相同

    xiaoxiao2025-12-04  4

    二叉排序树 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 今天我们要判断两序列是否为同一二叉排序树 输入 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。 接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉排序树。 接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉排序树。(数据保证不会有空树) 输出 示例输入 2 123456789 987654321 432156789 0 示例输出 NO NO # include <stdio.h> # include <stdlib.h> # include <string.h> typedef struct node { char data; struct node*l,*r; } Node; Node* BST(Node*root,int key);//创建二叉搜索树 void level_traverse(Node*p,char s[]);//层次访问 int main() { int n; int j; char str1[11]; char str2[11]; Node*root1,*root2; while((scanf("%d",&n))!=EOF) { if(n==0) { break; } scanf("%s",str1); root1 = NULL; for(j=0;j<strlen(str1);j++) { root1 = BST(root1,str1[j]); } level_traverse(root1,str1); while(n--) { scanf("%s",str2); root2 = NULL; for(j=0;j<strlen(str2);j++) { root2 = BST(root2,str2[j]); } level_traverse(root2,str2); if(strcmp(str1,str2) == 0) printf("YES\n"); else printf("NO\n"); } } return 0; } Node* BST(Node *root,int key) { if(root == NULL)//树空直接插入该节点 { root = (Node*)malloc(sizeof(Node)); root->data = key; root->l = NULL; root->r = NULL; return root; } else //找到应该插入的位置 { if(root->data > key) { root->l = BST(root->l,key); } else { root->r = BST(root->r,key); } } return root; } void level_traverse(Node*p,char s[]) { int i,front,rear; Node*queue[20]; Node*q; if(p) { front = rear = 0; i = 0; queue[rear++] = p; while(front < rear) { q = queue[front++]; s[i++] = q->data; if(q->l) { queue[rear++] = q->l; } if(q->r) { queue[rear++] = q->r; } } } }
    转载请注明原文地址: https://ju.6miu.com/read-1304612.html
    最新回复(0)