第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。
?
轉載于:https://www.cnblogs.com/AUlikeHER32/p/10810499.html
總結
- 上一篇: Win11 将推出全新文件资源管理器,严
- 下一篇: 五步法颈椎病自我按摩图解