树(数据结构三)

数据结构:集合、线性表(栈和队列)、树、图

1-概念

1.1什么是树?

线性结构:如数组和链表
非线性结构:树是典型例子,不再是一对一,而是一对多(图则是多对多)

注意:树的定义是一个递归定义,树的定义中又用到了树的概念。
在这里插入图片描述

1.2树的术语

空树、子树
根结点、父结点、孩子结点、叶子结点

结点的度:子树个数

树的度:最大的结点的度
结点的层级:根为第一层
结点的深度:从跟到结点的唯一路径的长,根的深度为0
结点的高度:从结点到一片树叶的最长路径的长,树叶的高为0

性质:如果一棵树有n个结点,那么它有n - 1条边。
注:每一条边必定是某一结点的入度。除了根结点,每个结点有唯一的入边。(即除根结点,1结点对应1入边)

temp

如果一棵树有n个结点,那么它有n - 1条边。(为什么呢?)
度
证明pf:(偏数学)
每一条边必定是某一个结点的入度;
除了根结点,每个结点


物理结构:数组、链表
科学计算:矩阵、计算、迭代
1.3树的实现(树的转化)
一个结点:最多有两个子结点,并且每一个结点的子结点,是有严格的左右划分。

链表:
Node{
	value;
	left;
	right;
}

数组:一维数组就可以存储一个二叉树

2-二叉树

2.1特殊的二叉树
2.2二叉树的特点

若干推论(考研408)

重点
如果对一颗有n个结点的完全二叉树的结点按层序从1开始编号,则对任意一结点有:

  如果编号i为1,则该结点是二叉树的根;
  如果编号i > 1,则其双亲结点编号为 parent(i) = i/2,			
      若 2i > n 则该结点没有左孩子,否则其左孩子的编号为 2i,
      若 2i + 1 > n 则该结点没有右孩子,否则其右孩子的编号为 2i + 1。

二叉树:严格的左右划分
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.3二叉树的遍历
DFS深度优先遍历(限定先左后右,先中后序3种)
BFS广度优先遍历(层次遍历)
2.4二叉树的建树

已知某二叉树的先序遍历为 ABDECFG,中序遍历为 DBEAFGC,试求它的后序遍历

3-二叉排序树(二叉搜索树、二叉查找树)

实现一个集合类:数据容器
数据角度:二叉搜索树
底层:链表(两个方向延伸)
普通树?没有意义
二叉树?没有意义
二叉搜索树?

二叉树----->二叉搜索树---->自平衡二叉搜索树
红黑树:极其类似自平衡二叉搜索树,但是要复杂的多(了解)

左子树中所有结点的key比根结点的key小,并且左子树也是二叉搜索树
右子树中所有结点的key比根结点的key大,并且右子树也是二叉搜索树

二叉搜索树:要添加到二叉搜索树中的元素要比较大小

要实现如下api

添加、删除、查找、没有替换(集合类中很少有,不应该有替换)
前序遍历、中序遍历、后序遍历(递归和栈2种方式)

二叉搜索树
自平衡的:(平衡二叉树)

所有实现了Compareble接口的方法,都是自然排序方法

比较大返回值是大于,代表大于;负值,代表小于;0,代表等于。

平衡二叉树
哈弗曼树
B树、B+树
红黑树

非常非常非常特殊的二叉树!!!(链表)


树的常见分类及使用场景

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lacrimosa&L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值