<数据结构> 树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为总结点个数)

posted @ 2018-10-21 13:49  Aaaaaalei  阅读(523)  评论(0编辑  收藏  举报