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

1.树的存储结构说明


h:该节点所在的高度
data:文档名
firstChild:第一个孩子节点
nextsbling:第一个孩子的兄弟节点

2.树的函数说明

2.1 函数概览

2.2 main函数

代码:

整个程序的思路:

2.3 OutFile函数

功能:从文件中读取<html>的内容

代码:

2.4 menu函数

功能:提供选项并做出选择

代码:

2.5 PrintTree函数

功能:按照要求格式输出树结构,通过h控制格式

代码:

2.6 TraverseTree函数

功能:在程序结束后将树写入文件

代码:

2.7 Change函数

设计思路:根据html文件格式特点转换成括号表达式

代码:


2.8 PrintFind函数

设计思路:找到结点输出路径,同时用栈记录走过的路径逆序输出

代码:

2.9 CreateCSTree函数

设计思路:先定义一个结构体类型的栈用来储存树的节点,利用用chang函数转换成的括号表达式来进行建树,定义一个count[tag],遍历括号表达式时,每遇到一个 ( tag加一即判断该节点在树的那一层,同时count数组也能让某层次的节点更好的退栈。


2.10 FindNode函数

设计思路:

代码:

2.11 InsertNode函数

设计思路:查找需要插入的位置,在需要插入的位置上建立一个新的分支即插入的分支。

代码:


2.12 DeleNode函数

设计思路:先查找需要删除的节点,如果该节点没有兄弟与孩子节点直接删除,如果该节点存在兄弟节点,在删除该节点的同时,把兄弟节点变为父亲节点的第一个孩子节点,还有一种情况:删除的节点为要删的节点为上一级的兄弟节点,与删除存在兄弟节点的节点方法相类似。

代码:


2.13 DestroyTree函数

代码:

3.树结果演示

3.1 生成树

3.2 查找节点

3.3 插入节点


3.4删除节点


4.碰到问题

  • Q1:文件读取结尾多一个字符?
  • A1: 通过再循环内if (infile.eof())break;解决
  • Q2:元素可能有多个子树?
  • A2:通过count[tag]数组计算每个括号内有几个元素
  • Q3:删除结点直接删除当前结点?
  • A3:还要对兄弟,父亲操作,连接相关树

5.小结

    代码的好与坏:文件的读取写入都只有一次执行,用h记录当前高度,通过count数组解决一个结点下有多个子树的情况,坏处在于先转成括号表达式再建立树,其实可以直接对文件内容操作建立树,但是也有一定好处,相比之下简单易懂,容易处理
    这次大作业对于我们来说收获挺大的,小组中的每个成员都能把自己所理解的分享出来,更好地促进学习,比如:在刚刚看这个题目时,大家都是一头雾水,不知道怎样开头,大家一起想办法,谈论出将文件中的内容转换为括号表达式,这样不仅能够更好的理解题目要求,还能为编写后面的函数省下不少的麻烦。这次的大作业也是一种考验,每个人都有每个人的想法,一个优秀的程序员不仅要会写代码,还要会读懂别人所写的代码,每个人都有每个人的编程习惯,在阅读代码的同时不仅要理解,还要适应他人的编程习惯。尤其时函数的传参,特别考验我们对于他人所写的代码的理解。

6.小组成员分配说明

小组成员 任务分配
祝文涛 主函数,建树函数,人员分配
林硕 转换括号表达式,博客园
王赐荣 插入函数
郭坤 文件操作以及树的输出
郭东阳 查找函数
吴斌凯 删除函数

7.小组讨论照片


原文地址:https://www.cnblogs.com/ls1272397716/p/10849968.html