数据结构第五章学习小结
本章学习内容:
本章我们学习了一种新的数据结构,“树”结构是一类非线性数据结构。主要学习到二叉树的内容,二叉树有好几个重要的性质。刚开始学这种数据结构的时候,还是觉得比线性结构抽象很多。在后来上课和打代码的时候理解到,二叉树存储结构跟遍历有很大的关系,遍历的结果是将非线性结构的树中结点排成一个线性序列。
这是二叉链表的存储表示:
typedef struct Bitnode { int data;//结点数据域 struct Bitnode *lchild,*rchild;//左右孩子指针 }Bitnode,*Bitree;
同时老师讲解的List Leaves 代码的实现让我非常受益匪浅,比如使用bool数组找出根结点。
void Create(Tree &T) { int n; cin>>n; bool check[10]={false};//使用check数组用于查找根节点 char a,b; for(int i=0;i<n;i++) { cin>>a>>b; if(a=='-' ) T.data[i].lch = -1; else { T.data[i].lch = a-'0'; check[a-'0']=true; } if(b=='-') T.data[i].rch = -1; else { T.data[i].rch = b-'0'; check[b-'0']=true; } } for(int i=0;i<n;i++) { if(check[i]==false) { T.root=i; break; } } }
以及我认为最重要的还是二叉树的遍历方式:先序,中序,后序,以及层次遍历。
遇到的困难:在小组合作过程中,困难在于如何建立这些树,这与它的存储结构密切相关,所以,分析树的存储结构尤为重要,也是树的难点,只有树建立起来,之后操作才能够更好的进行。虽然小组作业过程中偶然发现了题目的天梯赛原题,但后面组长调试小组版本的代码中出现了很多段错误问题,同时也没考虑释放内存的问题。所以即使有PTA能跑100分的代码可供参考,我也要吸取别人的长处,对代码不足的地方进行优化,争取能完美复现。
反思:有时候会因为是早课容易走神,没有好好记笔记。同时第五章学习过程中也犯过不少乌龙。我需要端正学习态度,好好记笔记。