树
以前没有好好学数据结构现在需要补回来欠的账还是要还的。
不知道大家喜不喜欢看权利的游戏个人还是十分推荐看!十分好看!!!
看上图这么多人物如果你想要找某个人是不是很奔溃!!!
假如这个人自身含有一些信息。
假如你找的人是 “小恶魔” 提利昂·兰尼斯特(个人非常喜欢他)
兰尼斯特家族,父亲是泰温兰尼斯特,母亲是乔安娜兰尼斯特,姐姐是瑟曦·兰尼斯特,哥哥是詹姆·兰尼斯特。有了这些条件查找是不是特别快!!
那树有什么作用呢?
权利的游戏的家谱图按血缘关系族类记载,这样管理查找人是不是特别快!!!
所以树最大的作用就是查找!
树的定义
定义参考https://blog.csdn.net/forwardyzk/article/details/53926282
树是n(n>=0)个结点的有限集合.当n=0时,集合为空,称为空树.在任意一颗非空树中,有且仅有一个特定的结点称为根.当n>1时,除根结点以外的其余结点可分成m(m>=0)个不相交的有限结点集合T1,T2….Tm.其中每个集合本身也是一棵树,称为根的子树.
其中:
(1)有且仅有一个称为根的结点:它没有前继结点,有0个或者多个后继结点.
(2)有若干个称为叶的结点:它们有且仅有一个前几节点,而没有后继结点.
(3)其余称为节的结点:它们有且仅有一个前继结点,至少有一个后继结点.
实际上,树表示了一组结点之间不同于线性表的前继和后继关系的数据结构.一般而言,树种任何一个结点只有一个前继(根结点除外),可以有多个后继(叶结点除外).
为什么树主要讲的是二叉树???
如下图一个树怎么表示呢?
如下图这样可以表示,但是如果有些结点的度是3、4、5那又怎么表示呢?结点又怎么定义呢?
孩子兄弟表示法来了
结点表示
调整一下
所以孩子兄弟表示法可以用二叉树表示任何树,这应该就是树这一章重点为什么讲二叉树吧!
二叉树
二叉树定义
二叉树 T:一个有穷的结点集合。这个集合可以为空。若不为空,则它是由两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
五种基本形态
- 空二叉树
- 只有一个根结点
- 根结点只有左子树
- 根结点只有右子树
- 根结点既有左子树又有右子树。
二叉树的子树有左右顺序之分
特殊二叉树
斜二叉树
满二叉树
每层都结点都满
完全二叉树
有n个结点的二叉树,对树中结点按从上至下、从左到右顺序进行编号,编号为 i(1≤i ≤n) 结点与满二叉树中编号为 i 结点在二叉树中位置相同
二叉树几个重要性质
- 一个二叉树第 i 层最大结点数为:2^(i-1), i≥1
- 深度为k的二叉树有最大结点总数为:2^k -1, k≥1
- 对任何非空二叉树T,若 n0 表示叶结点的个数、n2 是度为 2 的非叶结点个数,那么两个满足关系 n0=n2+1
证明 n0=n2+1
假如在二叉树中 n0 表示叶结点个数,n1 表示度为 1 的结点个数,n2 表示度为 2 的结点个数。因为边数+1 等于结点数。
n1+2*n2+1=n0+n1+n2,所以 n0=n2+1
二叉树存储
顺序存储
链式存储
结点
二叉树遍历
先序、中序、后序、按层遍历
请看我这篇 二叉树遍历
总结
参考 数据结构ZJU 陈越姥姥
主要介绍了下树的一些基础知识,后面会再写 BST、AVL、RBT 等树。 以前没好好学,欠的账还是要还的,好好打基础,多问为什么?
才学疏浅,有什么问题请大家指出来。十分感谢!