- 浏览: 612083 次
- 来自: ...
-
文章分类
最新评论
-
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 26841. 填空题 ⑴ 设无向图G ... -
排序练习题
2012-12-27 16:46 1570一、选择题 1、以下序 ... -
2011计算机考研题
2012-12-20 12:19 1529初中的数学书上 ... -
2010计算机考研题:循环左移数组
2012-12-18 16:56 1527一、第一种方法,都想得到的。 static int[] L ... -
两种方法反转单链表
2012-12-17 20:38 1797/** * @author luochengcheng ... -
2009计算机考研题:查找链表中倒数第k个结点
2012-12-15 20:36 1409原理:两个指针先都指向头指针的下一节点,一个指针先走K-1 ... -
上楼梯(深搜+回溯)JAVA解答
2012-11-12 15:28 1382N阶楼梯上楼问题:一次可以走两阶或一阶,请把所有行走方式打印出 ... -
深度优先搜索解组合问题(JAVA)
2012-11-10 12:17 1627题:输出从n不同元素中取m个的所有组合 下面程序使用了深度优先 ... -
图示克鲁斯卡尔构造最小生成树的过程
2012-11-06 11:29 1562... -
图示普里姆算法构造最小生成树的过程
2012-11-06 11:24 1466... -
由二叉树的后序遍历和中序遍历结果写出前序遍历
2012-10-07 17:32 1606【题目】 假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ... -
树与二叉树:选择题50个
2012-08-23 16:33 3154单项选择题 (C) 1. 不含任何结点的空树 ... -
二叉树:填空题
2012-08-22 13:17 1899填空: 1. 由3个结点所 ... -
输出给定二叉树的嵌套括号表示(java)
2012-08-21 20:52 1873题:对于下图的二叉树,输出其嵌套括号表示 import j ... -
二叉树:选择题
2012-08-21 15:20 1245下面是有关二叉树的叙述,请判断正误(每小题1分,共10分) ( ... -
如何求完全二叉树的叶子节点数?
2012-08-20 22:21 2922设完全二叉树的高度为K: 题:设一棵完全二叉树有700个 ... -
列磁盘目录(深度优先和广度优先实现)
2012-08-12 00:01 1623有两种常用的方法可用来搜索图:即深度优先搜索和广度优先 ... -
线性表自测题一套及解答
2012-08-10 21:22 2224自测卷 ... -
数据结构概论自测题及答案一套
2012-08-09 21:54 1358一、填空题 ......................... ... -
栈和队列:判断题
2012-08-09 11:35 2288二 判断题 1. 消除递归不一定需要使用栈,此说法( √ ...
相关推荐
4. **数据结构实现**:实际竞赛中,往往需要自定义数据结构来优化算法,如平衡二叉搜索树、堆、斐波那契堆、并查集等。课件会详细介绍这些数据结构的原理和实现方法。 5. **编程技巧**:包括快速读入输出、预处理、...
5. **图论算法**:包括深度优先搜索(DFS)、广度优先搜索(BFS)、最短路径算法(如Dijkstra算法、Floyd算法)、最小生成树算法(如Prim算法、Kruskal算法)等,用于解决图相关的复杂问题。 ### 知识点三:实战...
6. **数据结构**:堆(大顶堆、小顶堆)、平衡二叉搜索树(AVL、红黑树)、树状数组、 Fenwick Tree(二分索引树)等。 7. **组合数学**:排列组合、鸽巢原理、容斥原理、卡特兰数、斯特林数等。 8. **概率统计**...
2049题和2050题可能是综合性较强或者难度较大的题目,可能会结合多种算法和技术,例如深度优先搜索(DFS)、广度优先搜索(BFS)与图论的结合,或者需要理解和应用高级数据结构如平衡二叉搜索树、字典树等。...