树形结构是一种层级式的数据结构,由节点和连接它们的边组成, java语言编写的程序中常常用引用来表示边。根是树中顶端的节 点:它没有父节点。节点表示保存在树中的数据对象。非平衡树是 指根左边的后代比右边多,或者相反。 区分树和图的主要特征是树中不存在环路。
树的节点 Root,parent,child,leaf,sibling 。
树的主要类型 N元树 平衡树 二叉树 二叉搜索树 AVL树 红黑树 2-3树(多叉树比二叉树有更多的关键字和子节点)。
树通常结合了有序数组和链表两种数据结构的优点,在树中查找数 据项的速度和在有序数组中查找一样快,并且插入数据项和删除数 据项的速度也和链表一样。 其中,二叉树和二叉搜索树是常用的树。二叉树指树中每个节点 多只能有两个子节点,二叉搜索树指一个节点的左子节点的关键 字值小于这个节点,右子节点的关键字的值大于或等于这个父节 点。 查找节点需要比较要找的关键字值和节点的关键字值,插入需要找 到要插入新节点的位置并改变他父节点的子字段来指向它。如果一 个节点没有子节点,删除它只要把它的父节点的子字段置为null即 可,如果一个节点有一个子节点,把它父节点的子字段置为它的子 节点就可以删除它,如果一个节点有两个子节点,删除它要用他的 后继(该节点的右子节点为根的子树中关键值小的那个节点)来 代替他。可以用数组表示树,不过基于引用的方法更常用。

二叉树的效率:
树的大部分操作都需要从上到下一层一层的查找某个节点,因此常 见树的操作(查找,插入,删除)时间复杂度大约是O(logN),如 果树不满,分析起来很困难,不过,可以认为对给定层数的树,不 满的树的平均查找时间比满树要短,因为在它的较低的层上完成查 找的次数要比满树时少。 树对所有常用的数据存储操作都有很高的效率,遍历不如其他操作 快,但是,遍历在大型数据库中不是常用的操作。
B树是多叉树,每个节点可以有几十或上百个关键字和节点,B树中 子节点的个数总是比关键字的个数多1,为达到好的性能,B树通 常在一个节点中保存一块的数据。

实战

在控制台上输入一组数据,按照输入数据的格式来构造一棵二叉树,并打印出二叉树的高度。
输入的数据格式如下:
12
2 3
2 11
3 4
3 5
11 12
11 13
4 6
5 7
12 14
12 15
14 16
16 17
用二叉树表示如下:

Java代码实现如下:

输出结果为:

红黑树
普通的二叉搜索树可以快速的找到一个给定关键字的数据项,可以快速的插入和删除数据,如果二叉搜索树中插入的是随机数据,执行效果很好,但是如果插入的是有序的数据或逆序的数据,速度就会变得特别慢,因为插入的数值有序时,二叉树就是非平衡的了,而对于非平衡树,它的快速查找,插入,删除,指定数据项的能力就丧失了。红黑树是增加了某些特点(在红黑平衡的方法中,每个节点都有一个新的特征:它的颜色不是红的就是黑的)的二叉搜索树,它将解决这个问题。
效率:
在红黑树中的查找时间和在普通二叉树中的查找时间几乎完全一样,因为在查找的过程中并没有应用红黑树的特征,额外的开销只是每一个节点的存储空间都稍微增加了一点来存储红黑的颜色(一个boolean变量)。插入和删除的时间要增加一个常数因子,因为不得不在下行的路径上和插入点执行颜色变换和旋转。平均起来,一次插入大约需要一次旋转,但是比在普通的二叉搜索树中要慢。因为在大多数应用中,查找的次数比插入和删除的次数多,所以应用红黑树取代普通的二叉搜索树总体上不会增加太多的时间开销,红黑树的优点是对有些数据的操作不会慢到O(N)的时间复杂度。
总结:保持普通二叉树的平衡是非常重要的,这样可以使找到给定节点必需的时间尽可能短,在二叉树中加入红黑平衡对平均执行效率只有很小的负面影响,却避免了对有序的数据操作的最坏的性能。

上一篇:java中的数据结构——链表

java中的数据结构——树相关推荐

  1. 动图 + 源码,演示 Java 中常用数据结构执行过程及原理

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  2. JAVA 中的数据结构

    Java 数据结构 Java工具包提供了强大的数据结构.在Java中的数据结构主要包括以下几种接口和类: 枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) ...

  3. [转]详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

  4. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...

    程序员的成长之路互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, ...

  5. 【Java】图解 Java 中的数据结构及原理

    原文:http://www.javastack.cn/article/2018/data-structure-and-the-principle-diagram/ 最近在整理数据结构方面的知识, 系统 ...

  6. 图解 Java 中的数据结构及原理,傻瓜也能看懂!

    最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于jdk8, 可能会有些特性与jdk7之前不相同, 例如LinkedList Linke ...

  7. 图解java_图解 Java 中的数据结构及原理!

    作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, 系统化看了下Java中常用数据结构, 突发奇想用动画来绘制数据流转过程. 主要基于 ...

  8. 动图+源码,演示 Java 中常用数据结构执行过程及原理

    程序员的成长之路 互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆 cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识 ...

  9. java中的数据结构之HashMap学习

    java中的数据结构之HashMap学习 equal与hashcode equals与hashcode的源码 为什么hashmap中作为键值的类要重写hashcode和equals方法 Integer ...

最新文章

  1. java多线程 -- 原子量 变量 CAS
  2. js layui 弹出子窗体_Layui中JS实现弹出层的应用
  3. java 的 i++ 和 ++i 的区别
  4. Qt的Oracle数据库QOCI驱动问题
  5. 014_TimePicker时间选择器
  6. 数组排序(选择排序和冒泡排序)
  7. 初学者也能看懂的 Vue2 源码中那些实用的基础工具函数
  8. Atitit.在线充值功能的设计
  9. xlsx文件打开乱码_excel表格文件打开都是乱码怎么解决
  10. java核心技术卷1基础知识整理
  11. 推荐一款基于bootstrap的漂亮的前端模板——inspinia_admin
  12. 适合外贸建站的vatage主题教程
  13. 白光led 计算机模拟,高显色指数LED白光的色度学模拟方法研究
  14. H.266/VVC测试软件VTM
  15. java excel单元格背景色,『excel表格尺寸设置』Java如何设置被导出excel单元格的样式?比如背景色,大小什么的?...
  16. K8S---Helm
  17. git拉取分支的方法?
  18. 深度学习(十)-AI起名
  19. ADI ADN4604ASVZ-RL模拟和数字交叉点 IC 4.25Gbps 集成电路
  20. Python自动发送短信脚本

热门文章

  1. 【python实现网络爬虫22】唯品会商品信息实战步骤详解
  2. 【重要】一文带你读懂什么是docker
  3. 【创业邦·年度创业人物】刘强东:十年战争与千亿美金帝国梦
  4. c语言游戏如何分享,c语言怎么编游戏_编程语言分享讨论总汇吧吧_直线网_最专业的数字艺术学习交流平台...
  5. 从零开始编写minecraft光影包(6)天空绘制
  6. 软件开发模型介绍、总结归纳
  7. strcpy会覆盖原来的吗_原来给jolla2015(旗鱼)恢复这么简单,你会了吗
  8. c语言碟片系统,硬盘分区C的备份还原系统光盘
  9. 海康、华为、中兴、联影...找工作记录
  10. 学籍(档案)管理系统的开发