《大话数据结构》第6章.树

树是图的一种特殊形式,二叉树是树的一种特殊形式(线性表也能看作为是二叉树的一种特殊形式,为斜树),二叉查找树是二叉树的一种特殊形式,平衡二叉树是二叉查找树的一种特殊形式



关键词:有序树、无序树、森林、度(degree)、高度(depth)、层次(level)
             树、二树、二叉树、二叉查找树(二叉排序树)、AVL树( 平衡二叉树的一种
             静态查找表、动态查找表、
             前序遍历(preorder)、中序遍历 (inorder) 、后续遍历(postorder)

what树:树是n(n≥0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:
1)有且仅有一个特定的称为 (Root)的结点
2)当 n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、...、Tm,其中每一个集合本身又是一棵树,并且称为根的 子树(SubTree)

树的特点:
1. n>0时根节点是唯一的,不可能存在多个根节点
2. 子树的个数没有限制,但它们只有一个Parent

二叉树(Binary Tree)
what二叉树:二叉树是(n≥0)个结点的有限集。n=0时称为空二叉树。在任意一颗非空二叉树中,由一个根结点和两颗互不相交的,分别称为根结点的左子树和右子树的二叉树组成。

线性结构与树结构的区别:线性一对一,树结构一对多

二叉树的特点:
1. 每个结点最多有两颗子树。(也就是说,不存在度大于2的结点)
2. 左子树和右子树是有顺序的,次序不能任意颠倒
3. 即使树中某节点只有一颗子树,也要区分它是左子树还是右子树。

what二叉树遍历:指 从根结点出发(注意:并不一定先访问根结点),按照某种 次序依次 访问访问二叉树中的所有节点,使得每个结点被访问一次且 仅被访问一次
这里的访问不一定就是指输出,也有可能是进行相关计算等。


二叉树遍历方法:
  1. 前序遍历
  2. 中序遍历
  3. 后序遍历
  4. 层序遍历
【递归时,根据不同的情况采用不同的遍历方式。比如归并排序合并,二叉查找析构时都是采用后序遍历递归。先序递归创建树等】

二叉树的5个性质:
性质1:二叉树的第i层 至多有2^(k-1)个结点(k≥1)
性质2:深度为k的二叉树 至多有2^k-1个结点(k≥1)
性质3:对任何一颗二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1
性质4 注意:仅适用于完全二叉树  具有n个结点的 完全二叉树 的高度为小等于logn的最大整数+1( 适用于完全二叉树、比较树
性质5:注意:仅适用于完全二叉树

二叉查找树

what二叉查找树:二叉查找树,又称为二叉排序树。它或者是一颗空树,或者是具有下列性质的二叉树。
1)首先二叉查找树是二叉树,所以它必须满足二叉树的性质
2)若它的左子树不空,则左子树上所有节点的值均小于它的根结点的值(换句话说,某结点i一定比其左子树所有结点都大)
3)若 它的右子树不空,则 子树上所有节点的值均大于它的 结点 的值 (换句话说,某结点i一定比其右子树所有结点都小)
4)它的左、右子树也分别为二叉查找树

注意:二叉查找树定义和堆定义的异同

当对二叉查找树进行中序遍历时,就可以一个有序的序列。
todo:二叉树中不允许出现相同键(因为如何这样查找相同元素的结点,结果是不确定的。也就是限制insert操作)

why二叉查找树:主要是为了提高查找、插入、删除关键字的速度,此外还可以排序。

核心思想以链式方式存储,避免了执行插入或删除操作时移动元素。只要找到合适的插入和删除位置后,仅需修改链接指针即可。
插入、和删除操作皆依赖于查找定位,因为要使二叉查找树是已排序的,以便以后查找。

时间复杂度 :O(h(二叉查找树高度)),查找、插入、删除皆是。h(二叉查找树高度)依赖于输入的元素,以及输入次序。理想情况下,为logn下界+1
二叉查找 树的查找,走的就是从根结点到要查找的结点的路径,其比较次数等于给定值的结点在二叉排序树的层数。极端情况下,最少为1次,即根结点就是要找的结点,最多也不会超过树的深度。可是,二叉查找树的查找插入删除性能依赖于树的形状,但树的形状是不确定的。



特殊二叉树:斜树、满二叉树、完全二叉树


完全二叉树
what完全二叉树:对一颗具有n个结点的二叉树按层序编号,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树编号为i的结点在二叉树中位置完全相同,则这颗二叉树称为完全二叉树。(也就是说,除了最底层的叶结点外是填满的,而最底层的叶节点从左至右又不得有空隙。)

满二叉树一定是一颗完全二叉树,但完全二叉树不一定是满的。
同样结点的二叉树,完全二叉树的深度最小。



平衡二叉树(Self-Balancing Binary Search Tree或Height-Balanced Binary Search Tree)

平衡二叉树有许多种类型,包括AVL-tree、RB-tree、AA-tree,其中最被广泛运用于STL的是RB-tree(红黑树) p<>p199

what平衡二叉树:
1)是一颗二叉排序树
2)其中每一个结点左子树右子树高度至多等于1(平衡因子只能是-1,0,1)

what平衡因子(BF,Balance Factor):二叉树上结点左子树深度减去右子树深度的值称为平衡因子。所以平衡二叉树上所有结点的平衡因子只可能是-1、0和1

what最小不平衡子树:距离插入结点最近的,且平衡因子的绝对值大于1(即等于2)的结点为子树,我们成为最小不平衡子树


时间复杂度:O(lgn)查找、插入、删除皆是。(无论最好,平均,还是最坏情况下)


你可能感兴趣的:(读书笔记,数据结构与算法)