第5章学习小结

第五章主要学习了树的知识,以前一直很好奇,为什么电脑能存储像树一样的数据结构,学完才发现,ADT加数组或者ADT加链表真的可以衍生出多种多样的数据类型,以下做出本章小结:

1.利用ASCII码实现不同类型的数据的转换,如:int = char - ‘0’。

2.学会了利用bool类型标记找出所需数据类型,如找根节点,先将bool型数组初始化成false,输入过的节点标记为true,那么为false的即为根节点。

3.树的四种遍历方式:利用递归实现三种遍历方式

先序:

void PreOrderTravel(node t[], int x)
{//先序遍历t[x]为根结点的树t
cout << t[x].name << " ";
if(t[x].lch!=-1) PreOrderTravel(t, t[x].lch);
if(t[x].rch!=-1) PreOrderTravel(t, t[x].rch);
}

中序:

void InOrderTravel(node t[], int x)
{//中序遍历t[x]为根结点的树t
if(t[x].lch!=-1) InOrderTravel(t, t[x].lch);
cout << t[x].name << " ";
if(t[x].rch!=-1) InOrderTravel(t, t[x].rch);
}

后序:

void PostOrderTravel(node t[], int x)
{//后序遍历t[x]为根结点的树t
if(t[x].lch!=-1) PostOrderTravel(t, t[x].lch);
if(t[x].rch!=-1) PostOrderTravel(t, t[x].rch);
cout << t[x].name << " ";
}

以及利用<queue>头文件包含的函数实现层次遍历。

void levelOrderTraverse(node t[], int x)
{//层次遍历t[x]为根结点的树t
int tmp;
queue<int> q;
q.push(x); //根结点所在下标入栈

while(!q.empty()){
tmp = q.front();
q.pop();
if(tmp!=-1){
cout << t[tmp].name << " ";
q.push(t[tmp].lch);
q.push(t[tmp].rch);
}
}
}

主要问题:

1.对函数体运行的具体流程还是想得不够明白透彻(可能真的不够聪明)。

2.还是会拖ddl。

 

posted on 2019-05-04 23:50  AUlikeHER  阅读(113)  评论(0编辑  收藏  举报