树-二叉搜索树-AVL树 树 树的基本概念 节点的度:节点的儿子数 树的度:Max{节点的度} 节点的高度:节点到各叶节点的最大路径长度 树的高度:根节点的高度 节点的深度(层数):根节点到该节点的路径长度 树的遍历 ·前序遍历:根左右(x,Tl,Tr) ·中序遍历:左根右(Tl,x,Tr) ·后序遍历:左右根(Tl,Tr,x) 树的表示法 1.父节点数组表示法 (寻找父节点O(1),寻找儿子节点O(n)) 2.儿子链表表示法 (为克服找父节点不方便,可牺牲空间换时间:) 3.左儿子右兄弟表示法…
树&二叉树 树是由节点和边构成,储存元素的集合.节点分根节点.父节点和子节点的概念. 二叉树binary tree,则加了"二叉"(binary),意思是在树中作区分.每个节点至多有两个子(child),left child & right child. 二叉搜索树 BST 顾名思义,二叉树上又加了个搜索的限制.其要求:每个节点比其左子树元素大,比其右子树元素小.…
AVL树的基本概念 AVL树是一种高度平衡的(height balanced)二叉搜索树:对每一个结点x,x的左子树与右子树的高度差(平衡因子)至多为1. 有人也许要问:为什么要有AVL树呢?它有什么作用呢? 我们先来看看二叉搜索树吧(因为AVL树本质上是一棵二叉搜索树),假设有这么一种极端的情况:二叉搜索树结点的插入顺序为1,2,3,4,5,也就是: 显而易见,这棵二叉搜索树已经其退化成一个链表了,也就是说,它在查找上的优势已经全无了—— 在这种情况下,查找一个结点的时间复杂度是O(n)! 如…
树:n(n>=0)个节点的有限集.有且只有一个root,子树的个数没有限制但互不相交.结点拥有的子树个数就是该结点的度(Degree).度为0的是叶结点,除根结点和叶结点,其他的是内部结点.结点的层次(Level)从根结点开始从1计数,树中结点的最大深度称为树的深度(Depth).树中结点的子树看成从左到右有次序不能互换的,称为有序树.多棵不相交的树构成森林. 树的存储结构 1. 双亲表示法(结点中存指针指向双亲,但要找某结点的孩子要遍历整棵树,所以可以加上指针指向孩子)      2. 孩子表…
定义 能够在key插入时一直保持平衡的二叉查找树: AVL树 利用AVL树实现ADT Map, 基本上与BST的实现相同,不同之处仅在于二叉树的生成与维护过程 平衡因子 AVL树的实现中, 需要对每个节点跟踪"平衡因子balance factor"参数 \(balance Factor=height (left SubTree)-height(right SubTree)\) 平衡因子大于0,称为"左重left-heavy", 小于零称为"右重right-…
二叉搜索树 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6293    Accepted Submission(s): 2820 Problem Description 判断两序列是否为同一二叉搜索树序列   Input 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束.接下去一行是一个序列,序列长度…
目录 简介 AVL的特性 AVL的构建 AVL的搜索 AVL的插入 AVL的删除 简介 平衡二叉搜索树是一种特殊的二叉搜索树.为什么会有平衡二叉搜索树呢? 考虑一下二叉搜索树的特殊情况,如果一个二叉搜索树所有的节点都是右节点,那么这个二叉搜索树将会退化成为链表.从而导致搜索的时间复杂度变为O(n),其中n是二叉搜索树的节点个数. 而平衡二叉搜索树正是为了解决这个问题而产生的,它通过限制树的高度,从而将时间复杂度降低为O(logn). AVL的特性 在讨论AVL的特性之前,我们先介绍一个概念叫做平…
1.为什么要有平衡二叉树? 上一节我们讲了一般的二叉查找树, 其期望深度为O(log2n), 其各操作的时间复杂度O(log2n)同时也是由此决定的.但是在某些情况下(如在插入的序列是有序的时候), 二叉查找树就会退化成近似链或链.如下图(b). 此时, 其操作的时间复杂度退化成线性的,即O(n).我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉.这同时也…
在以下讨论中,虽然任意复杂的关键字都是允许的,但为了简单起见,假设它们都是整数,并且所有的关键字是互异的. 总概   使二叉树成为二叉查找树的性质是,对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有的关键字值大于X的关键字值.注意,这意味着该树所有的元素可以用某种统一的方式排序. 操作 #ifndef __Tree_H struct TreeNode *Position; typedef struct TreeNode *SearchTree; SearchTr…
1.定义 对于每个节点X,它的左子树中所有的项的值小于X的值,右子树所有项的值大于X的值. 如图:任意一个节点,都满足定义,其左子树的所有值小于它,右子树的所有值大于它. 2.平均深度 在大O模型中,二叉查找树的平均深度是O(logN) . 证明:查找某个节点x的算法深度,即从根出发找到节点x的路径长.所有查找的平均深度,就是平均内部路径长. 假设二叉查找树共N个节点,假设左子树有i个节点,则右子树节点数目:N-i-1. 假设D(N)表示具有N个基点的内部路径长.则N个节点的树的内部路径长:D(…