第七章 查找——课后习题解练【数据结构(c语言版 第2版)】
1.选择题
(1)(2)(3)
答案:CDC
(4)
(5)
(6)
(7)(8)(9)(10)(11)
答案:CCCCB
(12)
答案:C
(13)
答案:A
(14)
(15)
2.应用题
(1)
附:计算ASL失败时,NULL不算比较次数
(2)
(3)
(5)
(6)
(7)
3.算法设计题
(1)
int BinarySearchRecursive(int arr[], int low, int high, int k) {if (low > high) {return -1; // 查找失败}int mid = (low + high) / 2;if (k == arr[mid]) {return mid; // 查找成功} else if (k < arr[mid]) {return BinarySearchRecursive(arr, low, mid - 1, k); // 左半区} else {return BinarySearchRecursive(arr, mid + 1, high, k); // 右半区} }
(2)
bool isBST(TreeNode* root, int& lastValue) {// 递归终止条件:空树视为BSTif (!root) {return true;}// 1. 递归检查左子树// 如果左子树不是BST,则整个树不是BSTif (!isBST(root->left, lastValue)) {return false;}// 2. 检查当前节点// 二叉搜索树要求当前节点值 > 前一个节点值// 注意:如果允许重复值,应将 <= 改为 <if (root->val <= lastValue) {return false;}// 更新lastValue为当前节点值// 用于后续右子树的比较lastValue = root->val;// 3. 递归检查右子树return isBST(root->right, lastValue); }