DS博客做业04--树大做业
1.树的存储结构说明



data:该结点内容
son:指向该结点的孩子结点
bro:指向该结点的兄弟结点
2.树的函数说明
头文件

函数1:CreatBTree

做用:按照孩子兄弟链建文档树html
设计思路:数组
补充
函数2:DestroyBTree

做用:销毁树函数
函数3:PrintBTree

做用:更新tree文件测试
设计思路:设计
补充
函数4:SeekTag 和 EndTag

做用:寻找指点结点3d
设计思路:指针
补充
函数5:NewTag

做用:插入新标签调试
设计思路:code
补充
函数6:DeleteTag

做用:删除指定标签htm
设计思路:
补充
函数7:FileRead 和 DataChange


做用:对文本进行预处理,FileRead函数是读取文件单行字符串合并为一个字符串,DataChange函数是
将文本转发为字符串数组
设计思路:
补充
主函数



3.树结果演示
- 建文档树:
原html文档:

建树tree文档:

运行界面:

4.碰到问题
- 问题一:最先思路上的问题。最先读题的时候,还觉得应该用二叉树来实现,后来在建结构体时发现不对,文档树显然是一个”多叉树“的问题,应该采用孩子-兄弟存储的方式来处理该问题。
- 问题二:html文档处理的问题。对于html文档的处理是一个挺麻烦的问题,是否要采用单个字符单个字符的判断?在通过讨论以后,咱们采用了蔡德鑫的方法,也就是对html文档进行预处理,将html中的字符串,切割成一段一段的
字符串,并用一个字符串数组来存储,以后的建树直接遍历该全局字符串数组便可获取须要的字符串。
- 问题三:建树的时候没有将纯文本与非纯文本进行区分来创建结点,致使叶子节点不明确。后来建立结点的时候进行一个判断(用string类的find函数),问题就解决了。
- 问题四:更新tree.txt文件的函数,咱们最先的思路是只须要在最先的时候打开一次文件,以后一直传递文件指针就好了,无需屡次开闭文件。但到最后,发现文件会出现重复写的问题。因而,咱们认为应该先将原文件删除,因而去网上找了相关资料(remove函数)。可是这个问题,仍是用在调用该函数后关闭再开启文件解决了......由于这样就已经能够轻松解决了。
- 问题五:写删除函数的时候没有考虑到,当待删除的结点拥有兄弟结点时,若是直接将该节点删除,会致使其兄弟结点与其父结点的链接断开。解决方法是,在传参数时多增长一个形参PreBT(传递父节点)
,这样,在删除结点前先判断是否存在兄弟节点,如有兄弟结点,则需将父节点与待删除结点的兄弟链接,再将该节点删除;不然,直接删除。如图:

5.小结
此次的大做业
好在:小组分工明确,思路清晰,而且函数递归写的好,而且熟练
很差:删除插入的功能不完善,有小bug,查找函数脱离预期,没法输出整条路径,有局限性
6.小组成员分配说明
范华:完成main函数和其余同窗的函数与main函数之间的调试和修改
李谦:参与讨论、测试数据
林钟鹏:完成NewTag和DeleteTag函数
蔡德鑫:完成树的建立CreatBTree函数和PrintBTree函数还有文件的预处理
白海槟:完成SeekTa函数和博客园
古锦源:参与讨论、PPT编辑、测试数据
7.展现大家讨论的照片