1 / 23

学习内容和重点( P227-250)

学习内容和重点( P227-250). 动态查找表( 二叉排序树 概念、用途,熟练掌握二叉排序树的构造和查找算法及其性能分析方法; 理解二叉排序树删除元素算法; 平衡二叉树 ( AVL 树) 概念; B - 树和 B + 树 概念). 53. 17. 78. 09. 65. 87. 15. 81. 回答问题 1( 概念). 什么是 二叉排序树?它有哪些特点?. 50. 50. 50. 50. 50. 50. 30. 30. 80. 80. 20. 40. 40. 90. 90. 35. 35. 85. 32. 88.

trudy
Download Presentation

学习内容和重点( P227-250)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 学习内容和重点(P227-250) • 动态查找表(二叉排序树概念、用途,熟练掌握二叉排序树的构造和查找算法及其性能分析方法;理解二叉排序树删除元素算法;平衡二叉树(AVL树) 概念; B-树和B+树 概念)

  2. 53 17 78 09 65 87 15 81 回答问题1(概念) 什么是二叉排序树?它有哪些特点?

  3. 50 50 50 50 50 50 30 30 80 80 20 40 40 90 90 35 35 85 32 88 查找关键字 == 50 , 35 , 90 , 95 回答问题2 二叉排序树的查找的过程是怎样的?

  4. 二叉排序树的查找的递归算法 通常,可取二叉链表作为二叉排序树的存储结构,则查找的递归算法如下: BiTree SearchBST (BiTree T,KeyType key){ //在根指针T所指二叉排序树中递归地查找某关键字等于key的数据元素 //若查找成功,则返回指向该数据元素结点的指针,否则返回空指针 if( (!T)||EQ(key,T->data.key)) return (T);//查找结束 else if LT(key,T->data.key) return(SearchBST(T->lchild,key)); //在左子树中继续查找 else return(SearchBST(T->rchild,key)); // 在右子树中继续查找 }//SearchBST

  5. 二叉排序树的查找的非递归算法 BinTree SearchBST( BitTree T , keytype k) { //在根指针为T的二叉排序树上查找一个关键字值为k的结点, //若查找成功返回指向该结点的指针,否则返回空指针 p = T; //指针p指向根结点,搜索从根结点开始 while ( p != NULL && p ->key != k ) { if (k <p -> key ) p = p -> lchild; else p = p -> rchild; } return ( p); }

  6. 回答问题3 二叉排序树的插入思想:可以用一个递归的过程实现,即:若二叉排序树为空,则新结点作为二叉排序树的根结点;否则,若给定结点的关键字值小于根结点关键字值,则插入在左子树上;若给定结点的关键字值大于根结点的值,则插入在右子树上。 新插入结点永远是叶子结点,为了插入到合理的位置,需要确定其双亲结点,然后根据大小关系确定是双亲的左孩子还是右孩子。 在二叉排序树中如何插入结点?

  7. 二叉排序树的插入的递归实现: void InsertBST( BitTree &T , BiTNode *P) { //在以T为根的二叉排序树上插入一个由指针p指向的新结点,其值域为插入的关键字 if ( T ==NULL) T = p ; else if ( T -> key > p->key ) InsertBST( T -> lchild , p ) ; else if (T -> key < p -> key ) InsertBST (T -> rchild , p) ; }

  8. 二叉排序树的插入的非递归实现: void InsertBST( BitTree &T , keytype k) { p = T; while ( p != NULL && p -> key!= key) { q = p; //双亲 if ( p ->key > key ) p = p -> lchild; else p = p -> rchild; } if ( p= =NULL ) { //查找没有成功 new(r); r->key=key; //创建新结点r if ( q ->key > key ) q ->lchild =r; else q -> rchild =r; } }

  9. 回答问题4 如何创建二叉排序树? 由一棵空二叉树开始,经过一系列的查找、插入操作生成一棵二叉排序树。 例:画出由数据 { 53, 78, 65, 17, 87, 09, 81, 15 }所构造的二插排序树的建树过程。

  10. 回答问题5 在二叉排序树中如何删除结点? 下面分四种情况讨论如何确保从二叉树中删除一个结点后,不会影响二叉排序树的性质: (1)若要删除的结点为叶子结点,可以直接进行删除。 (2)若要删除结点有右子树,但无左子树,可用其右子树的根结点取代要删除结点的位置。 (3)若要删除结点有左子树,但无右子树,可用其左子树的根结点取代要删除结点的位置,与步骤⑵类似。

  11. 二叉排序树的删除 (4)若要删除结点的左右子树均非空,则首先找到要删除结点的左子树中关键字值最大的结点(即子树中最右结点),利用上面的方法将该结点从左子树中删除,并用它取代要删除结点的位置,这样处理的结果一定能够保证删除结点后二叉树的性质不变。p230

  12. 回答问题6 二叉排序树的查找性能如何? 与二叉排序树的形态有关!即与查找关键字的顺序有关。如由关键字序列 1,2,3,4,5构造而得的二叉排序树和由关键字序列 3,1,2,5,4构造而得的二叉排序树的平均查找长度是大大不同的。

  13. 二叉排序树的查找性能的分析 n个结点最坏情况下是n(树的深度),平均查找长度为(n+1)/2;最好情况是与折半查找的判定树相同,其平均性能和logn等数量级.

  14. 45 24 45 24 53 45 90 24 12 回答问题7 什么是平衡二叉树(AVL树)? 如果一棵二叉排序树是平衡的,且有 n个结点,其高度可保持在O(log2n),平均查找长度也可保持在O(log2n)

  15. 回答问题8 如何使构成的二叉排序树成为平衡树?

  16. 平衡二叉树的平衡化旋转 (理解平衡树的平衡调整方法 ) 如果在一棵平衡的二叉搜索树中插入一个新结点,造成了不平衡。此时必须调整树的结构,使之平衡化,同时保持二叉排序树特性。 ★平衡化旋转有四种情况: 1.LL型 (引起最下层不平衡结点为c,所插结点为a的左孩子(L)的左孩子(L) ),平衡调整要进行右旋转。 a b b a c c

  17. a b c 平衡二叉树的平衡化旋转 ★平衡化旋转 2.RR型 (引起最下层不平衡结点为c,所插结点为a的右孩子(R)的右孩子(R) ),平衡调整要进行左旋转. b c a

  18. 平衡二叉树的平衡化旋转 ★平衡化旋转 3.LR型 (引起最下层不平衡结点为c,所插结点为a的左孩子(L)的右孩子(R) ),平衡调整要进行左、右两次旋转.插入结点替代a,a变为其右孩子。 a c b a b c

  19. 平衡二叉树的平衡化旋转 ★平衡化旋转 4. RL型 (引起最下层不平衡结点为c,所插结点为a的右孩子(R)的左孩子(L),平衡调整要进行右、左两次旋转.插入结点替代a,a变为其左孩子。 a c b b a c

  20. 1 35 1 18 2 43 78 1 11 1 27 1 39 3 47 53 64 1 99 F F F F F F F F F F F F 回答问题9 什么是B-树?(理解概念) 例如在下述的4阶B-树中找47和23

  21. B-树的查找过程 p239 从根结点出发,沿指针搜索结点和在结点内进行顺序(或折半)查找 两个过程交叉进行。 若查找成功,则返回指向被查关键字所在结点的指针和关键字在结点中的位置; 若查找不成功,则返回插入位置。

  22. root sqt 59 97 15 44 59 72 97 10 15 21 37 44 51 59 63 72 85 91 97 回答问题10 什么是B+树?(理解概念)

  23. 下节课学习内容和重点 • 哈希表(掌握相关概念,掌握创建哈希表的常用方法以及解决冲突的方法)

More Related