1. 程式人生 > >第五章內容小結

第五章內容小結

搜索 put 訪問 empty post ash 先序 先序遍歷 操作

在第五章,我們學習了樹這個數據結構,並且學習了其定義、遍歷等操作,最後還學習了哈夫曼樹。

一.樹的遍歷

樹的遍歷操作有以下三種:

1。先序遍歷(根,左孩子,右孩子)

void PreOrderTravel(node t[], int x)
{
    cout << t[x].name << " ";
    if(t[x].lch!=-1) PreOrderTravel(t, t[x].lch);
    if(t[x].rch!=-1) PreOrderTravel(t, t[x].rch);
}

2。中序遍歷(左孩子,根,右孩子)

void
InOrderTravel(node t[], int x) { if(t[x].lch!=-1) InOrderTravel(t, t[x].lch); cout << t[x].name << " "; if(t[x].rch!=-1) InOrderTravel(t, t[x].rch); }

3。後序遍歷(左孩子,右孩子,根)

void PostOrderTravel(node t[], int x)
{
    if(t[x].lch!=-1) PostOrderTravel(t, t[x].lch);
    
if(t[x].rch!=-1) PostOrderTravel(t, t[x].rch); cout << t[x].name << " "; }

二.實踐遇到的問題。

針對“深入虎穴”這道編程題,看到輸入格式的時候一開始有點懵,不知道怎麽將這樣的輸入方式與樹這個數據結構相契合。

技術分享圖片

但後來在老師帶領下,明白了這個輸入格式所對應的邏輯圖。

技術分享圖片

然後建立結點。

typedef struct{
    int doors;//門的數量 
     int *p;//p指向門的編號,將p看作是整型數組 
 }node;

然後主函數。

int main(){
    node *a;
    int i,j,k,root;
    root = input(a);
    cout<< find(a,root)<<endl;
    return 0;
}

輸入和尋找是最大的問題,一開始在find函數中還把循環裏的i<a[x]寫成了i<=a[x],導致溢出,無論怎樣測試都不對

int input(node *&a)
{
    int n,i,x,j;
    bool *vi;
    cin>>n;
    a = new node[n+1];//為a數組申請空間。
    vi= new bool[n+1];
    for(i=1;i<=n;i++)
    {//初始化vi為false
        vi[i]=false;
    }
    
    for(i=1;i<=n;++i)
    {
        cin>> x;
        a[i].doors=x;
        a[i].p=new int[x];
        for(j=0;j<x;++j)//new的空間為x,x的有效下標為0~x—1,故循環從0開始。
        {
            cin>>a[i].p[j];
            vi[a[i].p[j]]=true;
            
        }
    }
    //找出根在數組的下標
    for(i=1;i<=n;++i)
    {
        if(!vi[i])break;
    }
    return i;
}

int find(node *a,int root)
{
    //從a數組的下標向下搜索
    queue<int>q;//定義用於待訪問的門編號的隊列。
    //根編號入隊
    q.push(root);
    int x,i;
    
    //當隊列不為空
    //x = 出隊
    //x後的門編號入隊
    while(!q.empty()){
        x=q.front();
        q.pop();
        for(i=0 ; i<a[x].doors;++i)
        {
            q.push(a[x].p[i]);
        }
    }
    //答案為x
    return x;
    
}

做完這道題以後,就覺得自己分析問題不夠清晰,思路有些混亂,然後做題過程中十分粗心、大意。

還需要多多練習,多敲代碼,繼續整理筆記,理清思路。

第五章內容小結