Loading

7.1 二叉树学习及其java实现

1.什么是树?

树是一种类似于链表的数据结构,只不过链表中节点之间的关系是1对1,
而在树中就变成了一对多的关系,树结构是表达具有层次结构的图的一种方式。

如下图所示:

每个节点都会有0/1/2个子节点和一个父节点,只有根节点没有父节点

1
2
3
4
5
6
null

对于树这种数据结构的应用,

元素的顺序并不是考虑的重点,如果我们需要用到元素的顺序信息, 我们大可去使用链表,栈,队列等这些较为简单的数据结构

那么使用树的关键在于哪里呢? 接着往下看

1.1 树结构在计算机的应用

下面是树的一些重要应用:

  • 编译器中的表达式树
  • 数据压缩算法的霍夫曼编码树(比较重要)
  • 支持在集合中查找,插入和删除,其平均时间复杂度为O(logn)的 二叉搜索树 (重要)
  • 实现优先队列,支持以对数时间对集合中最小或最大数据元素进行搜索和删除的 最大/小堆 (重要)

综上,在性能上,树的关键在于支持大量数据下数据的快速查找,插入和删除(时间复杂度最小化)

2.学习树的相关术语

  • 根节点:唯一一个没有父母节点的节点(就是最上面的节点root)
  • 边:它表示父母节点到孩子节点的连接线(就是节点的引用)
  • 叶子节点:没有孩子节点的节点。(就是最下面的节点)
  • 兄弟节点:拥有相同的父母节点的节点,他们以兄弟相称
  • 祖先节点: 隔了1层以上的节点可以统称为祖先节点
  • 节点的大小:指的是其所有子孙加上自己节点的总个数
  • 树的层:位于相同深度的节点的集合称为一层,一颗树有多少种这样的层就称这个树有多少层
  • 节点的深度:从根节点到目标节点的路径长度,自上而下
  • 节点的高度:从目标节点到最深节点的路径长度,自下而上
  • 树的高度:树中所有节点中高度的最大值
  • 树的深度: 树中所有节点中深度的最大值
  • 斜树:它是特殊的树,除了叶子节点没有孩子节点外,其余每个节点只有一个孩子节点

3.二叉树

3.1 二叉树的定义

一颗树中的所有节点的子节点最多为两个的树叫二叉树,空树也是一颗有效的二叉树。

3.1.1 二叉树的几个类型

  • 严格二叉树:每个节点要么有两个孩子节点,要么一个都没有。
posted @ 2020-03-23 14:12  文牧之  阅读(7)  评论(0)    收藏  举报  来源