Java实现简单二叉树
来源:互联网 发布:中国人的审美 知乎 编辑:程序博客网 时间:2024/05/16 15:47
B树
即二叉搜索树:
1.所有非叶子结点至多拥有两个儿子(Left和Right);
2.所有结点存储一个关键字;
3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
如:
B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;
否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入
右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
如果B树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那么B树
的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是,改变B树结构
(插入与删除结点)不需要移动大段的内存数据,甚至通常是常数开销;
如:
但B树在经过多次插入与删除后,有可能导致不同的结构:
右边也是一个B树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的
树结构索引;所以,使用B树还要考虑尽可能让B树保持左图的结构,和避免右图的结构,也就
是所谓的“平衡”问题;
实际使用的B树都是在原B树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树
结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在B树中插入和删除结点的
策略;
public class NodeTree { int data; //根节点数据 NodeTree left; //左子树 NodeTree right; //右子树public NodeTree() {super();}public NodeTree(int data) { //实例化二叉树super();this.data = data;left=null;right=null;} public void insert(NodeTree root,int data){ if(data>root.data){ //如果插入的节点大于跟节点 if(root.right==null){//如果右子树为空,就插入,如果不为空就再创建一个节点 root.right=new NodeTree(data); //就把插入的节点放在右边 }else{ this.insert(root.right, data); } }else{ //如果插入的节点小于根节点 if(root.left==null){ //如果左子树为空,就插入,如果不为空就再创建一个节点 root.left=new NodeTree(data); //就把插入的节点放在左边边 }else{ this.insert(root.left, data); } } }}
public class NodeQuery {public static void preOrder(NodeTree root) { // 先根遍历if (root != null) {System.out.print(root.data + "-");preOrder(root.left);preOrder(root.right);}}public static void inOrder(NodeTree root) { // 中根遍历if (root != null) {inOrder(root.left);System.out.print(root.data + "--");inOrder(root.right);}}public static void postOrder(NodeTree root) { // 后根遍历if (root != null) {postOrder(root.left);postOrder(root.right);System.out.print(root.data + "---");}}public static void main(String[] args) { int[] array = {35,17,39,9,28,65,56,87}; NodeTree root = new NodeTree(array[0]); //创建二叉树 for(int i=1;i<array.length;i++){ root.insert(root, array[i]); //向二叉树中插入数据 } System.out.println("先根遍历:"); preOrder(root);/* System.out.println(); System.out.println("中根遍历:"); inOrder(root); System.out.println(); System.out.println("后根遍历:"); postOrder(root);*/}}
上面这个树的实现,应该是最经典最简单的了吧;
1 0
- Java实现简单二叉树
- 简单二叉搜索树的JAVA实现。
- java实现简单的二叉树
- Java实现简单的二叉树
- java实现简单的二叉树
- java中简单二叉树的实现
- 简单二叉搜索树 java实现
- 简单二叉树实现
- 简单实现二叉树
- 简单二叉树实现
- 二叉树简单实现
- 数据结构(JAVA)---二叉树的简单实现及排序
- java简单实现二叉树插入和遍历
- 二叉树排序在Java代码的简单实现
- 用Java实现一个简单的二叉树
- 简单二叉树的实现
- 二叉树的简单实现
- 二叉树 简单实现 问题解决
- 正向代理和反向代理的区别
- java基础18-io
- simpleAdapter 简单实用方法
- 解决QNetworkAccessManager实现ftp功能后,不能上传大于1G文件的问题
- 使用 FileSystem JAVA API 对 HDFS 进行读、写、删除等操作
- Java实现简单二叉树
- android ScrollView 嵌套RecyclerView 快速滑动粘黏问题
- 数据结构预备知识(一)
- java int与integer的区别
- 什么是 epmd
- 基于迅为4412精英版连接SIM7100C模块Android下调试——RIL库分析(一)
- Java泛型通配符extends与super
- C语言标准库函数-strcpy
- 优化页面加载速度