交付查插删中序一起验收
这是这条路线的最终作品。把 BST 写完整(insert / contains / inorder / erase,外加析构时释放全部节点),然后一次验完五条:插完五个数,中序是 5 个;contains(23) 为真、contains(2
有序插入十万个怎么办
要把十万个已经排好序的数插进一个有序集合并反复查询,最稳妥的做法是【0】。
补写 BST 的插入
场景:实验机上 ~/work/bst/tree.cpp 读入一串整数,依次插进 BST,然后输出中序和先序两行。可 insert 还是空的。 任务:补全 insert(重复的值忽略)。make 编译,./tree < sample.t
有序数据插入太慢了
场景:~/work/bst/seq.cpp 先读 n 个数插进一棵普通 BST,再回答 q 个「在不在」的询问。数据是排好序的,n = 10^5 时要跑很久。 任务:改写 seq.cpp,让它在 1 秒内跑完(输出格式不变)。make 编译
实现增删查并对拍
场景:~/work/bst/ops.cpp 按指令操作一棵 BST:i x 插入、d x 删除、q x 查询(输出 yes/no),最后输出中序。insert、erase、contains 三个函数还没写。 任务:补全三个函数,删除要正确处
修好双孩子删除
场景:~/work/bst/succ.cpp 删除节点后输出中序。删叶子和单孩子都对,可删掉有两个孩子的节点后,有时会丢掉一串节点。 任务:修好 erase 里双孩子那一支。make 编译(带内存检查)后用 sample.txt 自测。 可
删掉的节点要还回去
场景:~/work/bst/leak.cpp 按指令删节点后输出中序。输出是对的,可 Makefile 带了内存检查,程序一结束就报内存泄漏。 任务:修好 erase:摘下来的节点要 delete,而且 delete 之后不能再读它。改完
大顶堆的规矩是什么
大顶堆要求【0】。
完全二叉树是什么意思
第 1 步:上面是树,下面是数组 第 2 步:24 压得住 23 和 15 第 3 步:23 压得住 13 和 17 第 4 步:13 和 17 是兄弟:不比 第 5 步:最大的自然在顶上 24 23 15 13 17 24 23 15 1
小顶堆的规矩
和大顶堆相反,小顶堆要求【0】。