二叉搜索树

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 6293    Accepted Submission(s):
2820

Problem Description
判断两序列是否为同一二叉搜索树序列
 
Input
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0
的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
 
Output
如果序列相同则输出YES,否则输出NO
 
Sample Input
2
567432
543267
576342
0
 
Sample Output
YES
NO
 
Source
 
Recommend
notonlysuccess   |   We have carefully selected several
similar problems for you:  3787 3790 3789 3788 1710 
 
我的思路:
建一棵树,上面放有flag,当有其他数组近来匹配时,若经过的节点的flag为0则,不相等,否则,将与该数相等的树的节点的flag设为1。
 
 
可以这样建树
struct tree                //声明树的结构
{
struct tree *left;
int data;
struct tree *right;
};

本题代码

 #include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
typedef struct treenode *tree;//定义treenode这个结构体是一个指针
struct treenode
{
int v;
tree left, right;//这个结构体指针又含有两个指针
bool f;//用于标记该节点曾经有没有经过
};
using namespace std; tree newnode(int x)//新建节点
{
tree t = (tree)malloc(sizeof(treenode));
t->v = x;
t->left = t->right = NULL;
t->f = ;
return t;//要有返回值
} tree insert(tree t,int x)//插入节点
{
if (!t) t = newnode(x);//如果节点为空,建一个节点
else
{
if (x < t->v)
{
t->left = insert(t->left, x);//不能写成t=。。。因为是插入在左边
}
else
t->right = insert(t->right, x);
}
return t;//要有返回值
} bool check(tree t, int x)
{
if (!t) return ;//x在树t中没有出现过
else
{
if (t->v == x)//相等,标记经过该节点
{
t->f = ;
return ;
}
else
{
if (t->f == ) return ;//经过了一个曾经没经过的节点
else
{
if (x < t->v)
return check(t->left, x);
else
return check(t->right, x);
}
}
}
} void init(tree t)//初始化树上的f
{
if (t)
{
t->f = ;
init(t->left);
init(t->right);
}
} int main()
{
int n;
char a[];
while (cin >> n && n)
{
tree t = (tree)malloc(sizeof(treenode));//开辟空间建第一个节点
cin >> a;
int l = strlen(a);
t->v = a[]-'';
t->left = t->right = NULL;
int i;
for (i = ; i < l; i++)
{
int x = a[i] - '';
t = insert(t,x);//插入节点;
}
while (n--)
{
cin >> a;
bool f = ;
for (i = ; i < l; i++)
{
int x = a[i] - '';
f = check(t, x);//进入树t检查
if (!f) break;
}
if (!f) cout << "NO" << endl;
else cout << "YES" << endl;
init(t);//把树上的f重新设为0
}
free(t);//释放树
}
return ;
}

HDU 3179 二叉搜索树(树的建立)的更多相关文章

  1. hdu 3791:二叉搜索树(数据结构,二叉搜索树 BST)

    二叉搜索树 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submiss ...

  2. HDU 3791 二叉搜索树 (数据结构与算法实验题 10.2 小明) BST

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3791 中文题不说题意. 建立完二叉搜索树后进行前序遍历或者后序遍历判断是否一样就可以了. 跟这次的作业第 ...

  3. hdu 3791 二叉搜索树(数据结构)

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  4. HDU 3791 二叉搜索树

    二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. HDU 3791 二叉搜索树 题解

    Problem Description 推断两序列是否为同一二叉搜索树序列   Input 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接下去一行是 ...

  6. HDU 3791二叉搜索树解题(解题报告)

    1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...

  7. 【剑指Offer】26、二叉搜索树与双向链表

      题目描述:   输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向.   解题思路:   首先要理解此题目的含义,在双向链表中,每个结 ...

  8. 原生JS实现二叉搜索树(Binary Search Tree)

    1.简述 二叉搜索树树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子 ...

  9. LeetCode 669. Trim a Binary Search Tree修剪二叉搜索树 (C++)

    题目: Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so th ...

随机推荐

  1. 用PHP开发命令行工具

    介绍 用过laravel开发过项目的都应该用过artisan,通过artisan我们可以在命令行中创建控制器类,Eloquent类等,今天我们将通过php来开发命令行工具 开发环境与工具 使用vagr ...

  2. python 返回系统名称,系统平台,系统版本

    import platform import os print(os.name) print(platform.system()) print(platform.release())

  3. 创建 shiny 应用程序

    R 本身是一个优秀的数据分析和数据可视化平台.然而,我们通常不会将 R 和分析脚本提供给客户,让客户自己运行.数据分析的结果不仅可以在 HTML 网页.PDF 文档或 Word 文档中显示,还可以呈现 ...

  4. Java回顾之ORM框架

    这篇文章里,我们主要讨论ORM框架,以及在使用上和JDBC的区别. 概述 ORM框架不是一个新话题,它已经流传了很多年.它的优点在于提供了概念性的.易于理解的数据模型,将数据库中的表和内存中的对象建立 ...

  5. C# DataTable Compute方法的使用

    在开发中需要对DataTable的数据进行处理,比如累加,求最大最小及平均值等,以前都采用手工对DataTable进行循环并计算的方式,现在发现DataTable的Compute方法可以轻松实现这些功 ...

  6. 使用POI动态更新导出的EXCEL模板中的列

    基本思路: 1.从附件服务器上取得模板的流文件 2.拿到流文件之后再使用workbook.write(outs);方法改变流文件中的数据. else if (pageContext.getParame ...

  7. XML——概述

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  8. android中LayoutInflater.from(context).inflate的分析

    在应用中自定义一个view,需要获取这个view的布局,需要用到 (LinearLayout) LayoutInflater.from(context).inflate(R.layout.conten ...

  9. Centos系统更改yum源为163

    Centos安装好之后,按照网上教程对yum源进行修改,但更新之后发现总是提示更新失败,到163网站上查找资源发现目前大部分网上的教程都写错地址了,呵呵 下面是正确的办法,请参考 1.进入存放源配置的 ...

  10. New Concept English Two 15 37

    listening speaking reading writing and translating $课文35  捉贼! 355. Roy Trenton used to drive a taxi. ...