<数据结构> 树Tree(简单理论)
一.与树相关的基本概念
1.树是可以为空树的 即根为空
2.树的层数 即为当前树的高度
3.结点的高度 从下往上看 看它下面有几个人
结点的深度 从上往下看 看它上面有几个人
4.度 即当前结点有几个孩子 整棵树的度就是最大的某一结点的度
5.中间结点 即为有孩子的结点
叶子结点 即为没有孩子的结点
(一直纠结在一个点上 到底是节点 还是结点 查了一下 对于完全二叉树来说 专业一点 是叶子结点 和非叶子节点 结点就是结束的点 节点还是有相交的线的部分)
二.二叉树的分类
1.满二叉树:每层都是满的的二叉树
2.完全二叉树:只有最后一层有空缺 并且是从右往左连续空缺
3.排序二叉树BST:也称为二叉搜索树
BST不允许出现数值相同的结点 每一个值都必须是唯一的
BST的查找速度相对来说还是挺快挺好 但是当有一种特殊情况变成了链表的话
它也就失去了这种速度和效率 为了避免这种情况 就出现了平衡二叉树
4.平衡二叉树ABL:ABL是建立在BST的基础之上的 除此以为
ABL树中任意结点的左右子高度差不能超过1
三.二叉树的性质
1.一个树k层 那么这个树的节点数最多(即为满二叉树)为2^k-1
2.一个树k层 那么这个树的叶子结点最多为2^(k-1)
3.设一棵树的总结点个数为S 度为0的结点个数为n0 度为1的为n1 度为2的为n2
那么S=n0+n1+n2(这个式子不难理解 一棵二叉树总的结点个数 就是度分别为1,2,3的结点总数)
我们还可以得出S=0*n0+1*n1+2*n2+1(0*n0表示被n0指向的 1*n1即为被n1指向的 n2同理 最后要加1是因为根没有人指向它 所以要加1)
最后上面两个式子联立就可以得出这样一条结论:n0=n2+1
即度为0的结点个数比度为2的结点个数多一个
注:在完全二叉树中 度为1的结点最多有一个 最少有0个
(PS:以下第4点第5点仅仅适用于完全二叉树)
4.n个结点的完全二叉树 它的高度k=⌊log2n⌋+1(向下取整)
5.把一颗完全二叉树 按照从上到下 从左到右的顺序开始编号:
①从1开始:编号为i的结点 左孩子编号为2*i 右孩子的编号为2*i+1
证明左右孩子是当前结点的孩子条件是<=n
父亲结点的范围是:1~n/2(n为总结点个数)
②从0开始:编号为i的结点 左孩子编号为2*i+1 右孩子的编号为2*i+2
证明左右孩子是当前结点的孩子条件是<=n-1
父亲结点的范围是:0~n/2-1(n为总结点个数)