package yfTest.shixi;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import org.junit.Test;
import sun.misc.Compare;
public class BTree {
public BTNode root;
private char[] c = {'a','b','#','c','#','d'} ;
public static int count = 0;
public void init(){
root =new BTNode(getC());
create(root,c);
}
public void create(BTNode node,char[] c){
char temp ;
node.addLeft(temp=getC());
if(temp != '#'){
create(node.getLeftChild(),c);
}
node.addRight(temp=getC());
if(temp != '#'){
create(node.getRightChild(),c);
}
}
public char getC(){
if(BTree.count<c.length)
return c[BTree.count++];
return '#';
}
@Override
public String toString(){
return root.toString();
}
@Test
public void show(){
init();
System.out.println(root);
Set<Integer> set = new HashSet<Integer>();
set.add(123);
set.add(123);
int[] a ={123,23,43};
System.out.println(set);
}
@Test
public void regexTest(){
String str = "I,.;am;.!;.!;.!eating;.?something";
str=str.replaceAll("\\p{Punct}", " ");
System.out.println(str);
}
}
class BTNode{
public static int Ceng = 1;
private char name;
private BTNode leftChild;
private BTNode rightChild;
public BTNode(char name){
this.name = name;
}
public boolean hasLeft(){
return leftChild != null /*&& !leftChild.getName().equals("#")*/;
}
public boolean hasRight(){
return rightChild != null /*&& !leftChild.getName().equals("#")*/;
}
public BTNode addLeft(char left){
leftChild = new BTNode(left);
return leftChild;
}
public BTNode addRight(char right){
rightChild = new BTNode(right);
return rightChild;
}
public void init(){
}
@Override
public String toString(){
String temp = name+""+BTNode.Ceng+"|";
BTNode.Ceng++;
if(hasLeft()) temp+="L "+leftChild.toString();
if(hasRight()) temp+="R "+rightChild.toString();
BTNode.Ceng--;
return temp;
}
public char getName() {
return name;
}
public BTNode getLeftChild() {
return leftChild;
}
public BTNode getRightChild() {
return rightChild;
}
}
分享到:
相关推荐
- 如果某个节点不存在,则在数组中留空或用特殊值表示。 #### 示例代码分析 下面是对给定代码的详细解析: ##### 定义二叉树节点 ```cpp struct BintrNode { char value; // 节点值 BintrNode* lf; // 左子...
**有序顺序表的顺序查找判定树**:有序顺序表的判定树是一棵完全二叉树,其中每一层节点对应于一次比较操作,树的高度决定了最坏情况下的查找次数。 #### 二、折半查找 折半查找(也称为二分查找)是一种高效的...
C语言实现数据结构中根据中序、后序遍历构建树,并进行先序与层次遍历,以树形结构输出,附有详细中文注释
最简单的合并方法是使用双指针,逐个比较两个列表的元素并选择较小的一个加入新列表。这个过程通常用于归并排序,一种高效的排序算法。 5. **有序表链表**: 有序表链表是指链表中的元素按照特定顺序排列,比如...
- 使用**哨兵元素**:在队列的末尾预留一个额外的位置,即使队列实际上还没有满,也会留有一个空位,从而避免假溢出。 - **队列满标志**:当front和rear相等时,通过额外的标志位判断队列是否真的已满。 #### 66. ...
②留一个空位,还剩一个空位的时候就认为已经满了 栈的应用: 1、进制转换 2、回文游戏 ①数组:可能编程还更简单 ②栈:逻辑上更清晰 ③算数运算的规则 实际上得编译器是用树的方法来实现的 ④最重要的应用...
10. **线性表删除操作**:在线性表用数组表示时,如果删除表中任一元素的概率相同,删除一个元素的平均移动元素个数可以通过计算期望值来确定,这涉及到概率论和组合数学。 在单项选择题中,涉及了以下知识点: - ...
13. **哈希表**:问题3要求构造一个哈希表,采用除留余数法并使用二次探测再散列解决冲突,哈希表的构建和存储结构的绘制涉及哈希函数的设计和冲突解决策略。 14. **二叉树算法设计**:问题8要求编写递归算法计算...
在第九章中,我们学习了如何使用“除留余数法”设计哈希函数,并解决冲突方法“线性探测再散列”。此外,我们还学习了如何求出 key 中各值的地址和查找成功时的比较次数,以及如何计算哈希表在等概率情况下查找成功...
链式结构如单链表和双链表使用指针链接元素,可以在任意位置快速插入和删除,但需要额外的存储空间。单循环链和双循环链则增加了首尾连接,便于环形遍历。二叉链用于实现二叉树,每个节点包含两个子节点的指针。 ...
- **数组表示法** 通常用于存储完全二叉树,用一维数组来存储树的节点,数组下标对应二叉树的层次和位置。 2. **平衡二叉排序树**: - 插入操作可能导致平衡二叉排序树失去平衡,这里展示了插入元素后的平衡化...
观察给出的序列,可以看到排序过程中较小的元素被移到了前面,而较大的元素留在了后面。这种模式与二路归并排序的结果相匹配,因为在二路归并排序中,每次比较都会将较小的元素移动到前面。 - **答案**: D. 二路归并...
输出对于每组测试用例输出一行,即:该二叉树的前序遍历序列,两个节点编号之间留一个空格。 在科学计算器题目中,需要编写程序计算一个不带括号的表达式的最后结果,最后结果一定是整数。输入是一个数学表达式,只...
- 除留余数法是哈希函数的一种,但解决冲突的方法包括开放寻址法、链地址法等,不一定是除留余数法。 7. **双亲指针**: - 在树的存储结构中,包含指向双亲节点的指针有助于快速查找双亲。 8. **判定树**: - ...
题目中提到的“算法的时间复杂度为 O(n^2)”,意味着随着输入数据规模n的增长,算法的运行时间将以n的平方速度增长。这通常指的是算法执行的时间与问题规模成正比,选项(D)正确。时间复杂度的分析可以帮助我们预测...
从给定的文件信息来看,这是一份关于浙江大学10年-878试卷中数据结构和操作系统部分的答案解析,主要聚焦于数据结构相关的知识点,包括链表、栈、二叉树、完全二叉树、B树、AVL树、哈夫曼编码、图以及排序算法等。...
- **解析**:使用邻接表表示图,并通过广度优先搜索(BFS)或深度优先搜索(DFS)进行遍历时,其时间复杂度为\(O(n+e)\),其中\(n\)为顶点数,\(e\)为边数。 **12. 哈夫曼树** - **知识点**:哈夫曼树的概念及应用。 -...
常见的散列函数有直接寻址法、数字分析法、平方取中法、折叠法、除留余数法等。此外,我们还可以采用开放寻址法(当发生冲突时,寻找下一个空槽位)或链地址法(每个槽位关联一个链表,冲突的键放入链表中)来处理...
3. **递归程序到非递归程序的转换**:递归程序可以通过迭代(如使用循环结构)或者使用栈等数据结构来转换为非递归程序。 4. **基于线性表与二叉树的常用递归程序**:例如二叉树的遍历、线性表的某些操作等,都是...