树是数据结构中的重中之重,本系列文章将着重介绍二叉树、二叉搜索树、AVL 树、红黑树、哈夫曼树、B 树、B+ 树、树与森林。争取学完之后做到心中有"树"。
树(Tree) 是 n(n>=0)个结点的有限集。n=0 时称为空树。
在任意一颗非空树中:
1)有且仅有一个特定的称为根(Root)的结点;
2)当 n>1 时,其余结点可分为 m(m>0)个互不相交的有限集 T1、T2、......、Tn,其中每一个集合本身又是一棵树,并且称为根的子树。
此外,树的定义还需要强调以下两点:
1)n>0 时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。
2)m>0 时,子树的个数没有限制,但它们一定是互不相交的。
一颗普通的树:
由树的定义可以看出,树的定义使用了递归的方式。递归在树的学习过程中起着重要作用,如果对于递归不是十分了解,建议先看看递归算法
结点拥有的子树数目称为结点的 度 。
结点子树的根结点为该结点的 孩子结点 。相应该结点称为孩子结点的 双亲结点 。
如上图中,A 为 B 的双亲节点,B 为 A 的孩子节点。
同一个双亲结点的孩子结点之间互称 兄弟结点 。
如上图中,结点 B 与结点 C 互为兄弟结点。
从根开始定义起,根为第一层,根的孩子为第二层,以此类推。
树中结点的最大层次数称为树的深度或高度
本系列文章参考网址汇总:
https://www.cs.usfca.edu/~galles/visualization/RedBlack.html
https://www.yisu.com/zixun/612759.html
https://github.com/tclxspy/Articles/blob/06e64dcf4d75fd0fa5548d0a6322ce0d9889ba00/algorithm/Code/RedBlackBST.java#L403