- 浏览: 604094 次
- 来自: ...
文章分类
最新评论
-
lgh1992314:
相同的元素呢
一种离散化方法 -
HelloSummerR:
圆心的位置是随机的,于是圆的部分会落到canvas外,那样就显 ...
HTML5 Canvas学习笔记(1)处理鼠标事件 -
hlstudio:
好久没见到sokuban了,这有个java版的,带源码,可以参 ...
求推箱子的最小步数(java) -
肖泽文:
太好了,谢谢你。。有中文注释!
HTML5 推箱子游戏过关演示动画 -
swm8023:
删除操作,将最后一个叶子节点插入后也有可能上浮吧
彻底弄懂最大堆的四种操作(图解+程序)(JAVA)
一棵二叉查找树是按二叉树结构来组织的。这样的树可以用链表结构表示,其中每一个结点都是一个对象。结点中除了数据外,还包括域left,right和p,它们分别指向结点的左儿子、右儿子,如果结点不存在,则为NULL。
它或者是一棵空树;或者是具有下列性质的二叉树:
1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉查找树;
显然满足了上面的性质,那么二叉查找树按中序遍历就是按从小到大的顺序遍历,这也就是为什么叫排序树的原因,当然上面的小于和大于都可以根据自己的需求改变的。
二叉查找树的几个常用操作:查找,删除,插入.
HDU 3791:
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
解释:按顺序插入数字之后,再用二叉树先序遍历判断两颗二叉树是否相同。
它或者是一棵空树;或者是具有下列性质的二叉树:
1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
(2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
(3)左、右子树也分别为二叉查找树;
显然满足了上面的性质,那么二叉查找树按中序遍历就是按从小到大的顺序遍历,这也就是为什么叫排序树的原因,当然上面的小于和大于都可以根据自己的需求改变的。
二叉查找树的几个常用操作:查找,删除,插入.
HDU 3791:
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
解释:按顺序插入数字之后,再用二叉树先序遍历判断两颗二叉树是否相同。
import java.util.Scanner; public class Main{ public static void main(String args[]){ Scanner in=new Scanner(System.in); BinarySearchTree<Character> root=null; while(in.hasNext()){ int t=in.nextInt(); if(t==0) break; root=new BinarySearchTree<Character>(); String result=null; String result1=null; String s=in.next(); for(int i=0;i<s.length();i++){ root.insert(s.charAt(i)); } result=root.printTree(root.getRoot()); for(int i=0;i<t;i++){ root=new BinarySearchTree<Character>(); s=in.next(); for(int j=0;j<s.length();j++){ root.insert(s.charAt(j)); } result1=root.printTree(root.getRoot()); if(result.equals(result1)) System.out.println("YES"); else System.out.println("NO"); } } } } class BinaryNode< T extends Comparable<T>> {//二叉查找树节点 BinaryNode< T> left; BinaryNode< T> right; T element; public BinaryNode(T theElement){ this(theElement, null, null); } public BinaryNode(T theElement, BinaryNode lt, BinaryNode rt){ element = theElement; left = lt; right = rt; } public T getElement(){ return this.element; } public BinaryNode< T> getLeft(){ return this.left; } public BinaryNode< T> getRight(){ return this.right; } public String toString(){ return element + ""; } } class BinarySearchTree< T extends Comparable<T>>{//二叉搜索树 private BinaryNode< T> root;//根节点 public BinarySearchTree(){//构造函数 root = null; } public BinarySearchTree(BinaryNode< T> t){//构造函数 root = t; } public void makeEmpty(){ root = null; } public boolean isEmpty(){ return root == null; } public BinaryNode<T> getRoot(){ return root; } public T find(T x){ return find(x, root).element; } public void insert(T x){ root = insert(x, root); } public void printTree(){ printTree(root); } private BinaryNode< T> find(T x, BinaryNode< T> t){//查找操作 if(t == null){ return null; } if(x.compareTo(t.element) < 0){ return find(x, t.left); } else if(x.compareTo(t.element) == 0){ return t; } else{ return find(x, t.right); } } private BinaryNode< T> insert(T x, BinaryNode< T> t){//插入操作 if(t == null){ t = new BinaryNode< T>(x, null, null); } else if(x.compareTo(t.element) < 0){ t.left = insert(x, t.left); } else if(x.compareTo(t.element) > 0){ t.right = insert(x, t.right); } else; return t; } private StringBuffer sb=new StringBuffer(); public String printTree(BinaryNode< T> t){//前序遍历二叉查找树 if(t != null){ sb.append(t.element); printTree(t.left); printTree(t.right); } return sb.toString(); } }
- Mainhdu3791.zip (1 KB)
- 下载次数: 0
发表评论
-
图的练习题(有解答)
2012-12-27 22:23 26581. 填空题 ⑴ 设无向图G ... -
排序练习题
2012-12-27 16:46 1552一、选择题 1、以下序 ... -
2011计算机考研题
2012-12-20 12:19 1508初中的数学书上 ... -
2010计算机考研题:循环左移数组
2012-12-18 16:56 1512一、第一种方法,都想得到的。 static int[] L ... -
两种方法反转单链表
2012-12-17 20:38 1782/** * @author luochengcheng ... -
2009计算机考研题:查找链表中倒数第k个结点
2012-12-15 20:36 1392原理:两个指针先都指向头指针的下一节点,一个指针先走K-1 ... -
上楼梯(深搜+回溯)JAVA解答
2012-11-12 15:28 1365N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打印出 ... -
深度优先搜索解组合问题(JAVA)
2012-11-10 12:17 1599题:输出从n不同元素中取m个的所有组合 下面程序使用了深度优先 ... -
图示克鲁斯卡尔构造最小生成树的过程
2012-11-06 11:29 1538... -
图示普里姆算法构造最小生成树的过程
2012-11-06 11:24 1447... -
由二叉树的后序遍历和中序遍历结果写出前序遍历
2012-10-07 17:32 1573【题目】 假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ... -
树与二叉树:选择题50个
2012-08-23 16:33 3116单项选择题 (C) 1. 不含任何结点的空树 ... -
二叉树:填空题
2012-08-22 13:17 1878填空: 1. 由3个结点所 ... -
输出给定二叉树的嵌套括号表示(java)
2012-08-21 20:52 1849题:对于下图的二叉树,输出其嵌套括号表示 import j ... -
二叉树:选择题
2012-08-21 15:20 1230下面是有关二叉树的叙述,请判断正误(每小题1分,共10分) ( ... -
如何求完全二叉树的叶子节点数?
2012-08-20 22:21 2904设完全二叉树的高度为K: 题:设一棵完全二叉树有700个 ... -
列磁盘目录(深度优先和广度优先实现)
2012-08-12 00:01 1595有两种常用的方法可用来搜索图:即深度优先搜索和广度优先 ... -
线性表自测题一套及解答
2012-08-10 21:22 2201自测卷 ... -
数据结构概论自测题及答案一套
2012-08-09 21:54 1323一、填空题 ......................... ... -
栈和队列:判断题
2012-08-09 11:35 2256二 判断题 1. 消除递归不一定需要使用栈,此说法( √ ...
相关推荐
4. **数据结构实现**:实际竞赛中,往往需要自定义数据结构来优化算法,如平衡二叉搜索树、堆、斐波那契堆、并查集等。课件会详细介绍这些数据结构的原理和实现方法。 5. **编程技巧**:包括快速读入输出、预处理、...
5. **图论算法**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(如Dijkstra算法、Floyd算法)、最小生成树算法(如Prim算法、Kruskal算法)等,用于解决图相关的复杂问题。 ### 知识点三:实战...
hdu 1166线段树代码
HDU(杭州电子科技大学在线评测系统)是一个深受程序员喜爱的在线编程练习平台,它提供了丰富的算法题目供用户挑战,帮助他们提升编程技能和算法理解能力。"hdu.rar_hdu"这个压缩包文件很可能是某位程序员整理的他在...
8. **图论与树**:HDU题目中可能涉及图的遍历(深度优先搜索DFS、广度优先搜索BFS)、树的遍历(前序、中序、后序)以及最小生成树、最短路径等算法。 9. **动态规划**:这是一种优化策略,通过构建状态转移方程来...
6. **数据结构**:堆(大顶堆、小顶堆)、平衡二叉搜索树(AVL、红黑树)、树状数组、 Fenwick Tree(二分索引树)等。 7. **组合数学**:排列组合、鸽巢原理、容斥原理、卡特兰数、斯特林数等。 8. **概率统计**...
同时,为了高效查找特定车辆的信息,可能还会用到哈希表或者二叉搜索树,它们能提供快速的查找功能。 2. **校园导游咨询系统**: 这个系统可能需要处理大量的地理位置信息,因此,图数据结构是必不可少的。每个...
【标题】"HDU_2010.rar"是一个压缩包文件,其中包含了与"HDU 2010"相关的资源,特别是针对"HDU ACM20"比赛的编程题目。"hdu 2010"和"hdu 20"可能是该比赛的不同简称或分类,而"hdu acm20"可能指的是该赛事的第20届...
搜索题是 ACM HDU 题目分类中的一大类,例如,1010 搜索题,剪枝很关键;1016 经典的搜索;1026 搜索;1043 经典搜索题,八数码问题;1044 稍微有点麻烦的搜索题;1045 搜索题,可用匹配做 等等。 贪心算法 贪心...
1. **深度优先搜索(DFS, Depth-First Search)**:DFS是一种遍历或搜索树(或图)的算法,它沿着树的深度方向进行探索,直到达到叶子节点或者回溯到一个未被访问的分支。DFS通常用于解决连通性问题,如判断图是否...
3. **算法与数据结构**:HDU的题目通常涉及到基础和高级算法,如排序、搜索、图论、动态规划等,以及各种数据结构,如链表、树、堆、图等。通过分析这些源代码,可以学习到如何在实际问题中应用这些理论知识。 4. *...
【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...
1. **基础算法**:包括排序(快速排序、归并排序等)、搜索(二分查找、深度优先搜索等)、图论(最短路径、最小生成树等)。 2. **动态规划**:解决许多具有重叠子问题和最优子结构的问题,如背包问题、最长公共子...
1. **算法基础**:解决ACM题目,首先需要掌握基础的算法,如排序(快速排序、归并排序、冒泡排序等)、搜索(二分查找、深度优先搜索、广度优先搜索等)和动态规划。 2. **数据结构**:常用的数据结构包括数组、...
(HDUACM2010版_06)并查集(最小生成树(HDUACM2010版_06)并查集(最小生成树(HDUACM2010版_06)并查集(最小生成树(HDUACM2010版_06)并查集(最小生成树
### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...
在这个平台上,程序员们可以练习和提交解决方案来解决各种算法问题。 标题"HDu1000—2169部分代码"可能指的是作者在HDU OJ上解决了一系列题目,从1000号题到2169号题的部分代码。这通常意味着这些代码是用于解决...
【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...
HDU1059的代码