记2020王道——《数据结构》第四章中一道存在问题的题目

探讨了二叉树后序遍历中,结点n在结点m前的条件,解析了n是m子孙的情况,并举例说明了特殊情况的存在。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

P123 第4题:
设n,m为一颗二叉树上的两个结点,在后序遍历时,n在m前的条件是()
A.n在m右方 B.n是m祖先 C.n在m左方 D.n是m子孙
这道题答案选择D,但后序遍历是左右中,所以n在m前面的话有三种情况:n左m右,n左m中,n右m中,这三种情况后两种都对应着n是m子孙,但第一种情况n左m右的时候如果n,m是一个结点的左右孩子,此时在后序遍历时n在m前面,但n不是m的子孙。

### 数据结构道教材课后习题及答案 #### 顺序表删除最小值 对于顺序表操作中的删除最小值问题,在《2024数据结构》教材P18-P19的第2.2.1题提供了详细的解答方法[^1]。该题目要求实现一个函数来移除顺序表中的最小元素并返回新的顺序表。 以下是Python代码示例: ```python def delete_min(lst): if not lst: return [] min_val = min(lst) new_lst = [val for val in lst if val != min_val] return new_lst ``` 此代码通过遍历列表找到最小值,并创建一个新的不包含这个最小值的新列表作为结果返回。 #### 图的应用——拓扑排序序列 关于图的应用,《25版数据结构》第六章讨论了多个应用场景,其中包括如何求解给定有向无环图(DAG)的所有可能的拓扑排序序列[^2]。书中提到的例子展示了几个不同的有效排列方式,如`ABCFDEG`, `ABCDFEG`, `ABCDEFG`, `ABDCFEG` 和 `ABDCEFG`都是合法的结果之一。 #### 二叉树概念理解 在第五章中探讨了有关二叉树的基础理论[^3]。“二叉树为空”的定义是指这棵树没有任何节点存在;然而值得注意的是,“空”并不代表对象本身不存在—它只是表示当状态下没有实际的数据存储于其中而已。另外还强调了一个重要区别:虽然线性表和树允许其内部不含任何项(即它们能够处于“空状态”),但是按照某些形式化描述下的图形结构则不允许完全没有顶点的情况发生。 #### 查找出现次数超过一半的数 最后,在处理数组方面的一个经典问题是找出那个出现了多于总数半数以上的特定数值。这个问题可以在《道22数据结构》第二章找到相应的练习题[^4]。下面给出了一种解决方案思路: ```cpp #include <iostream> using namespace std; // 假设输入已经按升序排列好的整型数组A[]以及长度n int findMajorityElement(int A[], int n){ int count = 1; int candidate = A[0]; // Boyer-Moore 投票算法 for (int i = 1; i < n; ++i) { if (count == 0) { candidate = A[i]; count++; } else if (candidate == A[i]) { count++; } else { count--; } } // 验证候选者确实是多数元素 count = 0; for (int i = 0; i < n; ++i) { if (A[i] == candidate) { count++; } } if (count > n / 2) { return candidate; } else { cout << "No majority element found." << endl; return -1; } } ``` 这段C++程序实现了Boyer-Moore投票算法用于高效查找满足条件的那个唯一数字。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

房东的小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值