知识点和算法
1.树和子树
树:n个节点的集合,满足如下特性:
1.跟结点只有一个
2.当n>1的时候,其根结点之下有m个不相交的集合,这些集合就称为子树。
2.结点的度、叶子、非终结点、分支结点、树的度、孩子、双亲、兄弟、祖先、子孙、堂兄弟、深度或高度、有序树、无序树
结点的度:结点拥有的子树的个数;
叶子(结点):度数为0的结点;
非终结点(分支结点、内部节点):度数不为0的结点;
树的度:树内各结点的度的最大值。
结点的指数的根被称为该结点的孩子。
相应的该结点称为孩子的双亲。
同一个双亲的孩子之间互称为兄弟。
结点的祖先是从根到该结点所经分之上的所有结点。
以某结点为根的指数中的任意结点都称为该结点的子孙。
其双亲在同一层的结点互为堂兄弟。
书中结点的最大层次称为数的深度或高度。
如果将数中结点的各个指数都看成从左至右是有序的,则称该数为有序树,否则为无序树。
森林是m棵互不相交的树的集合。
二叉树的定义是另一种树形结构,它的特点是:
每个节点至多只有两颗子树;
并且二叉树的子树有左右之分,其次序不能任意颠倒。
4.二叉树的性质
性质1 在二叉树的第i层上,至多有
2
i
−
1
2^{i-1}
2i−1个节点。
证明:可以利用归纳法进行证明
性质2 深度为k的二叉树至多有
2
k
−
1
2^{k}-1
2k−1个节点,k>=1。
证明:根据性质1求和
性质3 对任意一颗二叉树T,如果其终端节点数为n,度为2的节点数为n2,这n=n2+1。
证明:n=n0+n1+n2;
分支总数n=n1+2n2+1;
求差得到:n=n2+1
5.满二叉树、完全二叉树
一个高度为k,且有
2
k
−
1
2^{k}-1
2k−1个结点的二叉树称为满二叉树。
节点与编号一一对应的称为完全二叉树。
6.二叉树的存储结构
1.顺序存储二叉树
2.链式存储二叉树
6.遍历二叉树
先序遍历:根节点、先序遍历左子树、先序遍历右子树
中序遍历:中序遍历左子树、根节点、中序遍历右子树
后序遍历:后序遍历左子树、后序遍历右子树、后序根节点
7.线索二叉树
对二叉树以某种次序遍历使其变为线索二叉树的过程叫做线索化。
8.树的表示法
1.双亲表示法
2.孩子表示法
3.孩子兄弟表示法
9.森林与二叉树的转换
森林的二叉树遍历
先序遍历(对应二叉树的先序遍历)
中序遍历(对应二叉树的中序遍历)
10.最优二叉树
从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径,路径上的分支数目称为路径长度。
树的路径长度是从树根到每个结点的路径长度之和。
如果获取最小值,则为最优二叉树或哈夫曼编码
哈夫曼编码可以用于if语句的判断。
字符串利用哈夫曼编码
任意一颗二叉树结点的前序序列和中序序列是唯一的。
10.二叉搜索树
如下几个原则:
1.左孩子、右孩子、双亲
2.二叉树
3.左子树集合<=根节点<=右子树的排序树
遍历的时间复杂度为n;
查找算法:
可以使用while循环,如果大就到右边找,如果小就到左子树中找。查找最大最小数也类似。
查找后继
在右孩子中查找最小的;
如果无右孩子,也不是直接父类的右子树,则父类为其直接后继;
如果无右孩子,但是节点为直接父类的右子树,则将间接父类的值为其后续
插入
查找位置,并使用某个东西存储
删除算法
替换子算法
删除步骤
1.结点没有左孩子,用右孩子代替。
2.有左孩子,无右孩子,用左孩子代替。
算法如下:
11.红黑树
在二叉搜索书上做了修改,新加了color标志
性质:
1.每个结点要么是红的,要么是黑的。
2.根结点是黑的。
3.每个叶结点(叶结点即指树尾端NIL指针或NULL结点)是黑的。
4.如果一个结点是红的,那么它的俩个儿子都是黑的。
5.对于任一结点而言,其到叶结点树尾端NIL指针的每一条路径都包含相同数目的黑结点。
红黑树的黑高为其根节点的黑高。
旋转
未完,待续