先定义树的节点类
package Tree; /** * 树节点 * @author Huangbin * d2014年7月18日 */ public class Tree { Object obj;//内容 Tree parent;//父节点 Tree lchild;//左孩子节点 Tree rchild;//右孩子节点 public Tree(Object obj) { this.obj = obj; } public String toString() { return "" + obj; } }
生成30个随机数,取第一个作为根节点,一次放入剩余29个数字。小的放左边大的放右边。使用中序遍历后就是排好序的了。
package Tree; import java.util.Random; /** * 二叉树 * * @author Huangbin * @data 2014年7月18日 */ public class Main { public static void main(String[] args) { Main mu = new Main(); int[] a = mu.creatArray(); Tree root = new Tree(a[0]);// 取第一个元素建立树 for (int i = 1; i < a.length; i++) { mu.put(a[i], null, root);//将第一个节点放进去,当作孩子节点,在put方法中会当作父节点。 } mu.preOrderDisplay(root); System.out.println(); mu.inOrderDisplay(root);// 中序遍历变成排序树 System.out.println(); mu.postOrderDisplay(root); } /** * 创建30个数的数组 * * @return */ public int[] creatArray() { int arr[] = new int[30]; Random rd = new Random(); for (int i = 0; i < 30; i++) { arr[i] = rd.nextInt(100); } return arr; } /** * 将元素放入树temp中生成二叉排序树 * * @param key * 元素值 * @param root * 临时保存父节点 * @param temp * 将要放的位置(开始时候传入根节点) */ public void put(int key, Tree root, Tree temp) { if (temp == null) {// 找到了空位 temp = new Tree(key);// 不存在就创建节点并结束方法 if (key < (int) root.obj) {// 注意这个判断条件,在这个里面进行节点之间关系的链接 root.lchild = temp; } else { root.rchild = temp; } temp.parent = root; } else { if (key < (int) temp.obj) {// 小于根节点放到左边去递归 put(key, temp, temp.lchild); } else if (key > (int) temp.obj) { put(key, temp, temp.rchild);// 大于等于放右边去递归 } } } /** * 中序遍历 * * @param root */ public void inOrderDisplay(Tree root) { Tree tree = root; if (tree != null) { inOrderDisplay(tree.lchild); System.out.print(tree + " "); inOrderDisplay(tree.rchild); } } /** * 先序遍历树root * * @param root */ public void preOrderDisplay(Tree root) { Tree tree = root; if (tree != null) { System.out.print(tree + " "); preOrderDisplay(tree.lchild); preOrderDisplay(tree.rchild); } } /** * 后续遍历树root * * @param root */ public void postOrderDisplay(Tree root) { Tree tree = root; if (tree != null) { postOrderDisplay(tree.lchild); postOrderDisplay(tree.rchild); System.out.print(tree + " "); } } } 运行结果: 88 49 23 15 38 27 26 28 32 48 42 54 50 67 65 62 57 58 66 80 75 76 82 86 85 15 23 26 27 28 32 38 42 48 49 50 54 57 58 62 65 66 67 75 76 80 82 85 86 88 15 26 32 28 27 42 48 38 23 50 58 57 62 66 65 76 75 85 86 82 80 67 54 49 88
相关推荐
数据结构 二叉排序树 二叉搜索树 java swing图形界面实现
说明: 可实现:构造树,插入,查找,删除. 通过模式的选择,可以插入值相等的点.但是不建议使用.
用java语言来构造二叉排序树,理解java数据结构。
java基础笔记数据结构-排序二叉树,详细描述了排序二叉树的原理及其实现方式,基础数据结构。
数据结构课设代码完整版,使用了java
数据结构课程设计,一个简单的基于二叉排序树的员工信息管理系统
数据结构—课程设计 包括 一元稀疏多项式计算器 迷宫问题 成绩分析问题 图的基本操作 实现以及背包问题 农夫过河问题的求解 13 停车厂模拟管理程序的设计与实现 12 简易电子表格的设计 11 简单个人书管理系统的设计...
红黑树、二叉平衡树、二叉排序树的java实现,做了泛型封装,可以装任何对象,其中还附带工具类,可以友好一点地打印树,还有各种遍历树方法的递归实现和非递归实现。
数据结构课设,用c语言编写的单链表, 表达式求值, 二叉树 ,二叉排序树 ,Huffman编码,五个做成菜单,只有一个main函数
java编写的二叉树的各种操作,其中包括二叉排序树和平衡二叉树的各项操作,用于学习数据结构,可以运行
Java数据结构和算法介绍了计算机编程中使用的数据结构和算法,对于在计算机应用中如何操作和管理数据以取得最优性能提供了深入浅出的讲解。全书共分为15章,分别讲述了基本概念、数组、简单排序、堆和队列、链表、...
学生成绩管理系统---使用数据结构中的二叉树排序,利用数据库实现学生查询、删除、修改信息、按学号或班级或课程成绩查询学生信息等。主要是字符界面显示
7.8 链表排序和索引表排序 7.9 内部排序小结 7.10 外部排序 7.11 参考文献和选读材料 第8章 Hash法 8.1 引言 8.2 静态Hash法 8.3 动态Hash法 8.4 Bloom滤波器 8.5 参考文献和选读材料 第9章 优先队列 9.1...
C/C++实现 数据结构与算法视频教程 01交换算法 02冒泡排序 03选择排序 04顺序排序 05折半排序 06递归算法 07递归折半查找 08算法_perm 09插入排序 10快速排序 11归并排序 12顺序栈 13顺序队列 14链表的基本概率 15...
Java数据结构的类库 小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小...
Java数据结构和算法中文第二版(1) Java数据结构和算法中文第二版(2) 【内容简介】 本书可帮助读者: 通过由基于JAVA的演示所组成的可视专题讨论来掌握数据结构和算法 学会如何为常见和不太常见的编程条件选择...
主要内容包括:算法效率的输入规模、阶和大O,数据结构的无序和有序列表,队列和栈基于数组和链表的设计实例,递归详解,二叉查找树和AVL树,堆、散列表和排序以及图论等。对于每一种数据结构的性质和用途,《计算机...
(7)二叉排序树及平衡化 (8)堆排序树 (9)B-树 4.图形结构 (1)图的定义及存储结构 (2)图的深度优先和广度优先遍历。 (3)无向图的连通性和最小生成树 (4)拓扑排序 (5)关键路径 (6)单源最短路径 5....
本教程是使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀...
Java数据结构的类库 小结 问题 第2章 数组 Array专题Applet Java中数组的基础知识 将程序划分成类 类接口 Ordered专题applet 有序数组的Java代码 对数 存储对象 大O表示法 为什么不用数组表示一切? 小结 问题 实验...