DS博客作业04--树大作业

DS博客作业04--树大作业

1.树的存储结构说明



    data:该结点内容
    son:指向该结点的孩子结点
    bro:指向该结点的兄弟结点

2.树的函数说明

头文件

函数1:CreatBTree

作用:按照孩子兄弟链建文档树

设计思路:

    补充

函数2:DestroyBTree

作用:销毁树

函数3:PrintBTree

作用:更新tree文件

设计思路:

    补充

函数4:SeekTag 和 EndTag

作用:寻找指点结点

设计思路:

    补充

函数5:NewTag

作用:插入新标签

设计思路:

    补充

函数6:DeleteTag

作用:删除指定标签

设计思路:

    补充

函数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.展示你们讨论的照片

原文地址:https://www.cnblogs.com/B-hai/p/10849746.html