SDUTOJ 2482 二叉排序树

#include<iostream>
#include<string.h>
using namespace std;
char c[100],d[100];
int o=0,e=0;
typedef struct bitnode
{
	char data;
	struct bitnode *lchild,*rchild;
}bitnode,*bitree;
void insert(bitree &t1,char key)
{
	if(t1==NULL)
	{
		t1=new bitnode;
		t1->lchild=t1->rchild=NULL;
		t1->data=key;
		return ;
	}
	else
	{
		if(key<t1->data)
			insert(t1->lchild,key);
		else
			insert(t1->rchild,key);
	}
}
void preorder(bitree t)
{
	if(t!=NULL)
	{
		c[o++]=t->data;
		preorder(t->lchild);
		preorder(t->rchild);
	}
}
void postorder(bitree t3)
{
	if(t3!=NULL)
	{
        postorder(t3->lchild);
		postorder(t3->rchild);
		d[e++]=t3->data;
	}
}
int main()
{
	char a[100],b[100];
	int n,len,i;
	bitree t1;
	while(cin>>n)
	{
		if(n==0)
		{
			break;
		}
		t1=NULL;
		cin>>a;
		len=strlen(a);
		for(i=0;i<len;i++)
		{
			insert(t1,a[i]);
		}
		preorder(t1);
		c[o]='\0';
		postorder(t1);
		d[e]='\0';
		for(i=0;i<n;i++)
		{
			cin>>b;
			if(strcmp(a,b)==0)
				cout<<"YES"<<endl;
			else if(strcmp(b,c)==0)
				cout<<"YES"<<endl;
			else if(strcmp(b,d)==0)
				cout<<"YES"<<endl;
			else
				cout<<"NO"<<endl;
		}
	}
	return 0;
}

时间: 2024-08-14 04:10:57

SDUTOJ 2482 二叉排序树的相关文章

SDUT 2482 二叉排序树

二叉排序树 Time Limit: 1000ms?? Memory limit: 65536K??有疑问?点这里^_^ 题目描写叙述 二叉排序树的定义是:或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上全部结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上全部结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 今天我们要推断两序列是否为同一二叉排序树 输入 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接

【LeetCode】96. Unique Binary Search Trees-唯一二叉排序树的个数

一.描述: 二.思路: BST(二叉排序树):中序遍历的结果为非递减序列,并且节点(个数和值)相同的不同二叉树的中序遍历结果都相同: 当左子树的节点个数确定后,右子树的个数也随之确定: 当节点个数为0或1时,二叉树只有1种,表示为f(0)=1,f(1)=f(0)*f(0): 当节点个数为2时,总的种类数=左子树为空f(0)*右子树不为空f(1)+左子树不为空f(1)*右子树为空f(0),即f(0)*f(1)+f(1)*f(0)=2种: 当节点个数为3时,有左子树为空f(0)*右子树不为空f(2)

16.二叉排序树

转载请表名出处:http://blog.csdn.net/u012637501 一.二叉排序树 如果要查找的数据集是有序线性表且是顺序存储的,查找可以用折半.插值.斐波那契等查找算法来实现.然后,由于有序,当我们在插入和删除操作上,就需要耗费大量的时间.下面将要学习的二叉排序树,就是一种既可以使得插入和删除效率不错,又可以比较高效率地实现查找的算法.为此,构造一棵二叉排序树的目的并不是为了排序,而是为了提供查找和插入删除关键字的速度. 1.二叉排序树概念 二叉排序树(Binary Sort Tr

腾讯笔试题:满二叉排序树,任给3个子节点,找他们最大的公共父节点

腾讯笔试题出现了和这个类似的题目,没做出来,现在来好好解决这个问题吧,先从基本的开始. 先吐槽一下:感觉算法设计什么的,真的超级难,也许是我头脑太笨,转不过弯来吧,呵呵. 题目是这样的:一棵满二叉排序树,有K层,节点的值依次为 1~2k-1.现在告诉你树的高度是4层,给定你3个节点,比如9,11, 13,那么最大的公共父节点是12. 现在想起来这题我已经想出来一半了呀,但是大概人在紧张的时候大脑会思维短路,跳不出原有的思维陷阱.想法是这样的: 1. 首先是从根节点开始,如果给的三个叶节点的值其中

九度oj 题目1467:二叉排序树

题目1467:二叉排序树 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4102 解决:1644 题目描述: 二叉排序树,也称为二叉查找树.可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均不大于根节点的关键字值:        2. 若右子树非空,则右子树上所有节点关键字值均不小于根节点的关键字值:        3. 左.右子树本身也是一颗二叉排序树. 现在给你N个关键字值各不相同的节点,要求你按顺序插入一个初始为空树的二叉

[二叉查找树] 二叉排序树

题目描述 输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历. 输入 输入第一行包括一个整数n(1<=n<=100).接下来的一行包括n个整数. 输出 可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序.中序和后序遍历.每种遍历结果输出一行.每行最后一个数据之后有一个空格. 样例输入 1 2 2 8 15 4 21 10 5 39 样例输出 2 2 2 8 15 8 15 15 8 21 10 5 39 5 10 21 39 5 10 39 21

二叉排序树(BST)的建立

给一个非递归的吧. 1 /* 2 已知,二叉树存储结构定义见bstree.h,请编写一个算法函数bstree creatBstree(int a[],int n), 3 以数组a中的数据作为输入建立一棵二叉排序树,并将建立的二叉排序树进行中序遍历. 4 (提示,a中的原始数据可从data1.txt中读入,实验代码详见lab9_05.c) 6 */ 7 8 #include "Arrayio.h" 9 #include "bstree.h" 10 #define N

重温数据结构:二叉排序树的查找、插入、删除

读完本文你将了解到: 什么是二叉排序树 Binary Sort Tree BST 二叉排序树的关键操作 查找 插入 删除 运行代码测试 一道面试题 总结 Thanks 我们知道,二分查找可以缩短查找的时间,但是有个要求就是 查找的数据必须是有序的.每次查找.操作时都要维护一个有序的数据集,于是有了二叉排序树这个概念. 上篇文章 我们介绍了 二叉树 的概念,二叉树有左右子树之分,想必在区分左右子树时有一定的规则. 现在我们来介绍二叉树的一种特殊形式 - 二叉排序树,了解它的区分策略及常用操作. 什

二叉查找树 _ 二叉排序树 _ 二叉搜索树_C++

一.数据结构背景+代码变量介绍 二叉查找树,又名二叉排序树,亦名二叉搜索树 它满足以下定义: 1.任意节点的子树又是一颗二叉查找树,且左子树的每个节点均小于该节点,右子树的每个节点均大于该节点. 2.由1可推出,任意节点的左孩子小于该节点,右孩子大于该节点 以上讨论的是左(右)孩子(子树)存在的情况 它的中序遍历是一个升序的排序 在参考代码中,我们定义有: 主程序中,k代表插入或删除或查找的节点的值 root,根节点位置:a[i],第 i 号节点的值:cl[i],第 i 号节点左孩子的位置:cr