25版王道数据结构课后习题详细分析 第七章 7.3树形查找

本文主要是介绍25版王道数据结构课后习题详细分析 第七章 7.3树形查找,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、单项选择题

————————————————————

————————————————————

解析:二叉排序树插入新结点时不会引起树的分裂组合。对二叉排序树进行中序遍历可得到有序序列。当插入的关键字有序时,二叉排序树会形成一个长链,此时深度最大。在此种情况下进行查找,有可能需要比较每个结点的关键字,超过总结点数的1/2。


正确答案:

————————————————————

————————————————————

解析:由二叉排序树的定义不难得出中序遍历二叉树得到的序列是一个有序序列。


正确答案:

————————————————————

————————————————————

解析:二叉排序树的查找路径是自顶向下的,其平均查找长度主要取决于树的高度。


正确答案:

————————————————————

————————————————————

解析:在二叉排序树的存储结构中,每个结点由三部分构成,其中左(或右)指针指向比该结点的关键字值小(或大)的结点。关键字值最大的结点位于二叉排序树的最右位置,因此它的右指针一定为空(有可能不是叶结点)。还可用反证法,若右指针不为空,则右指针上的关键字肯定比:原关键字大,所以原关键字结点一定不是值最大的,与条件矛盾,所以右指针一定为空。


正确答案:

————————————————————

————————————————————

解析:在二叉排序树上查找时,先与根结点值进行比较,若相同,则查找结束,否则根据比较结果,沿着左子树或右子树向下继续查找。根据二叉排序树的定义,有左子树结点值≤根结点值≤右子树结点值。C序列中,比较911关键字后,应转向其左子树比较240,左子树中不应出现比911更大的数值,但240竟有一个右孩子结点值为912,所以不可能是正确的序列。


正确答案:

————————————————————

————————————————————

解析:按照二叉排序树的构造方法,不难得到A, B,D序列的构造结果相同。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:当输入序列是一个有序序列时,构造的二叉排序树是一个单支树,当查找一个不存在的关键字值或最后一个结点的关键字值时,需要n次比较。
 


正确答案:

————————————————————

————————————————————

解析:五个不同结点构造的二叉查找树,中序序列是确定的。先序序列的个数为n=5的卡特兰数,加上中序序列和先序序列能唯一确定一棵二叉树,因此二叉排序树的形态共有Catalan(5)=42种。


正确答案:

————————————————————

————————————————————

解析:当二叉排序树的叶结点全部都在相邻的两层内时,深度最小。理想情况是从第一层到倒数第二层为满二叉树。类比完全二叉树,可得深度为[log2(n + 1)]。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:插入和删除结点都有可能引起LR平衡旋转或者RL平衡旋转,发生两次旋转操作。


正确答案:

————————————————————

————————————————————

解析:当按关键字有序的顺序插入初始为空的平衡二叉树时,若关键字个数n=2*-1时,则该平衡二叉树一定是一棵满二叉树(可以用1~3、1~7手工验证)。当插入关键字1023时,平衡二叉树正好是一棵满二叉树,高度是9。因此,插入关键字1024后,平衡二叉树的高度是10。


正确答案:

————————————————————

————————————————————

解析:Ⅰ和Ⅱ都是红黑树的性质。AVL是高度平衡的二叉查找树,红黑树是适度平衡的二叉查找树,从这一点也可以看出AVL的查询效率往往更优,Ⅲ错误。AVL的某结点的左右孩子的平衡因子都是零,并不能说明左右子树的高度相等,因此该结点的平衡因子不一定为零,IⅣ错误。


正确答案:

————————————————————

————————————————————

解析:自平衡的二叉排序树是指在插入和删除时能自动调整以保持其所定义的平衡性,两者都属于自平衡二叉树,A正确。两者的查找、插入、删除操作的时间复杂度都为O(logr),B正确。在红黑树中删除结点时,情况1可能变为情况2、3或4,情况⒉会变为情况3,可能会出现旋转次数超过2次的情况,C错误。从任一结点到每个叶结点的所有路径都包含相同数目的黑结点,没有两个连续的红结点,且叶结点是红色的,这意味着在任一结点到其左右子树中最远和最近的叶结点之间,红结点的数目小于或等于黑结点的数目,路径长度之比不超过2,D正确。


正确答案:

————————————————————

————————————————————

解析:红黑树的红结点数目最大可以是黑结点数目的2倍(如一棵有3个结点的红黑树,第1层为黑色,第2层为红色),A错误。从根结点出发到所有叶结点的黑结点数是相同的,若所有结点都是黑色,则一定是满二叉树,B正确。考虑某个黑结点,它可以有一个空叶结点孩子和一个非空红结点孩子,C错误。红黑树中可能存在红结点,根结点为红色的子树不是红黑树,D错误。


正确答案:

————————————————————

————————————————————

解析:红黑树是一种特殊的二叉排序树,B项不满足二叉排序树的性质。C项中,结点2的左右黑结点数不同。D项中,结点3的左右黑结点数不同。只有A项满足红黑树的定义。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:根据平衡二叉树的定义,任意结点的左、右子树高度差的绝对值不超过1。而其余3个答案均可以找到不满足条件的结点。答题时可以把每个非叶结点的平衡因子都写出来。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:由于在二叉排序树中插入结点的位置是一个新的叶结点,若删除的是叶结点,则重新插入后得到的二叉排序树与原来的二叉排序树相同。若删除的是非叶结点,在删除过程中会找其他结点填补,重新插入后变成叶结点,则得到的二叉排序树与原来的二叉排序树不同。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:大多数教材将平衡二叉树定义为一种高度平衡的二叉排序树,二叉排序树的中序序列是一个升序序列,而题意正好相反。由此可知,命题老师认为平衡二叉树仅为一棵满足高度平衡的二叉树,不一定是二叉排序树。只有两个结点的平衡二叉树的根结点的度为1,A错误。中序遍历后得到一个降序序列(与二叉排序树正好相反),树中最大元素一定无左子树(可能有右子树),这与二叉排序树也正好相反,也因此不一定是叶结点,B错误,D正确。最后插入的结点可能会导致平衡调整,而不一定是叶结点,C错误。


正确答案:

————————————————————

————————————————————

解析:根据二叉排序树的特性:中序遍历(LNR)得到的是一个递增序列。图中二叉排序树的中序遍历序列为,3, Xs,x4,,可知x<xs<X4。


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

————————————————————

————————————————————

解析:


正确答案:

二、综合应用题

————————————————————

————————————————————

解答:先序序列为(50,38,30,45,40,48,70,60,75,80),二叉树的中序序列是一个有序序列,所以为(30,38,40,45,48,50,60,70,75,80),由先序序列和中序序列可以构造出对应的二叉树,如下图所示。

查找成功的平均查找长度为
ASL=(1×1+2×2+3×4+4×3)/10=2.9
图中的方块结点为虚构的查找失败结点,其查找路径为从根结点到其父结点(圆形结点)的结点序列,所以对应的查找失败平均长度为
ASL=(3×5+4×6)/11 =39/11
 

————————————————————

————————————————————

解答:

————————————————————

————————————————————

解答:

————————————————————

————————————————————

解答:

这篇关于25版王道数据结构课后习题详细分析 第七章 7.3树形查找的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1137933

相关文章

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

hdu1011(背包树形DP)

没有完全理解这题, m个人,攻打一个map,map的入口是1,在攻打某个结点之前要先攻打其他一个结点 dp[i][j]表示m个人攻打以第i个结点为根节点的子树得到的最优解 状态转移dp[i][ j ] = max(dp[i][j], dp[i][k]+dp[t][j-k]),其中t是i结点的子节点 代码如下: #include<iostream>#include<algorithm

【数据结构】——原来排序算法搞懂这些就行,轻松拿捏

前言:快速排序的实现最重要的是找基准值,下面让我们来了解如何实现找基准值 基准值的注释:在快排的过程中,每一次我们要取一个元素作为枢纽值,以这个数字来将序列划分为两部分。 在此我们采用三数取中法,也就是取左端、中间、右端三个数,然后进行排序,将中间数作为枢纽值。 快速排序实现主框架: //快速排序 void QuickSort(int* arr, int left, int rig

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)

《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)

8.3 交换排序 8.3.1 冒泡排序 【算法特点】 (1) 稳定排序。 (2) 可用于链式存储结构。 (3) 移动记录次数较多,算法平均时间性能比直接插入排序差。当初始记录无序,n较大时, 此算法不宜采用。 #include <stdio.h>#include <stdlib.h>#define MAXSIZE 26typedef int KeyType;typedef char In

Verybot之OpenCV应用二:霍夫变换查找圆

其实我是想通过这个程序来测试一下,OpenCV在Verybot上跑得怎么样,霍夫变换的原理就不多说了,下面是程序: #include "cv.h"#include "highgui.h"#include "stdio.h"int main(int argc, char** argv){cvNamedWindow("vedio",0);CvCapture* capture;i

【408数据结构】散列 (哈希)知识点集合复习考点题目

苏泽  “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家    知识点 1. 散列查找 散列查找是一种高效的查找方法,它通过散列函数将关键字映射到数组的一个位置,从而实现快速查找。这种方法的时间复杂度平均为(

【JavaScript】LeetCode:21-25

文章目录 21 最大子数组和22 合并区间23 轮转数组24 除自身以外数组的乘积25 缺失的第一个正数 21 最大子数组和 贪心 / 动态规划贪心:连续和(count)< 0时,放弃当前起点的连续和,将下一个数作为新起点,这里提供使用贪心算法解决本题的代码。动态规划:dp[i]:以nums[i]为结尾的最长连续子序列(子数组)和。 dp[i] = max(dp[i - 1]

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

Python 内置的一些数据结构

文章目录 1. 列表 (List)2. 元组 (Tuple)3. 字典 (Dictionary)4. 集合 (Set)5. 字符串 (String) Python 提供了几种内置的数据结构来存储和操作数据,每种都有其独特的特点和用途。下面是一些常用的数据结构及其简要说明: 1. 列表 (List) 列表是一种可变的有序集合,可以存放任意类型的数据。列表中的元素可以通过索