日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

7-4 二叉树的遍历!(简单) (25 分)

發布時間:2023/12/4 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 7-4 二叉树的遍历!(简单) (25 分) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

7-4 二叉樹的遍歷!(簡單) (25 分)

二叉樹作為FDS課程最核心的數據結構之一,要求每個人都掌握!

這是一道簡單的二叉樹問題!

我們將給出一顆二叉樹,請你輸出它的三種遍歷,分別是先序遍歷,中序遍歷,后序遍歷!

輸入格式:

二叉樹將以這樣的形式給出:

第一行給出一個正整數N(N<=100),表示二叉樹上的節點個數!

接下來N行,每行包含三個整數,i,l,r,分別代表第i個節點的左右孩子!

如果它的左/右孩子為空,則在對應位置給出-1!

題目保證1是根節點!

輸出格式:

請你輸出它的三種遍歷!

第一行輸出先序遍歷,第二行輸出中序遍歷,第三行輸出后序遍歷!

每行末尾無多余空格!

輸入樣例:

在這里給出一組輸入。例如:

3 1 2 3 2 -1 -1 3 -1 -1

輸出樣例:

在這里給出相應的輸出。例如:

1 2 3 2 1 3 2 3 1

?思路:利用遞歸建樹? ?然后 遍歷? 本題受刺激最大 有些人 人家 用4 行代碼 就建成樹了 而我用了這么多? 花了好長時間? 聽軟工老師的話感觸最深? 每個人都是從寫垃圾碼寫過來的? 加油 陌生人? 今天 5月九號 分手了

? #include<bits/stdc++.h> using namespace std; typedef int Elementyple; typedef struct TNode* BiTree; typedef struct TNode{Elementyple Data;struct TNode* Left;struct TNode* Right; }tnode; int N; BiTree createNode() {BiTree node = new TNode;node->Left = NULL;node->Right = NULL;return node; } BiTree CreaTree(int number[10000][15],int x){if(x==-1)return NULL;BiTree BT;// BT=(BiTree)malloc(sizeof(struct TNode));BT=createNode();BT->Data=x;BT->Left=CreaTree(number,number[x][0]);BT->Right=CreaTree(number,number[x][1]);return BT; } int flag=0; //如果每層都定義一個flag=0的話那么每次遞歸的時候 flag都是從0開始 無法達到flag++de 效果 void PreorderTraversal( BiTree BT ){if(BT){flag++;if(flag==N)printf("%d",BT->Data);else printf("%d ",BT->Data);PreorderTraversal(BT->Left);PreorderTraversal(BT->Right);} } void InorderTraversal( BiTree BT){if(BT){InorderTraversal(BT->Left);flag++;if(flag==2*N)printf("%d",BT->Data);elseprintf("%d ",BT->Data);InorderTraversal(BT->Right);} } void PostorderTraversal( BiTree BT ){if(BT){PostorderTraversal(BT->Left);PostorderTraversal(BT->Right);flag++;if(flag==3*N)printf("%d",BT->Data);elseprintf("%d ",BT->Data);} }int main(){int i,a[10000][15],b[10000];scanf("%d",&N);for(i=1;i<=N;i++){scanf("%d%d%d",&b[i],&a[i][0],&a[i][1]);}BiTree BT; BT=CreaTree(a,1);PreorderTraversal(BT);printf("\n");InorderTraversal(BT);printf("\n");PostorderTraversal(BT);}?

?下面這個碼pta上?過不去 但測試多組數據沒問題? ? 但還是思路有問題? 記錄一下自己 努力的失敗結果? ?

//根據輸入的構建二叉樹 //然后 進行先序 后序 中序的遍歷 #include<bits/stdc++.h> using namespace std; #define Maxsize 100 typedef int Elementyple; typedef struct TNode* BiTree; typedef struct TNode{Elementyple Data;struct TNode* Left;struct TNode* Right; }tnode;int N; BiTree createNode() {BiTree node = new TNode;node->Left = NULL;node->Right = NULL;return node; } BiTree CreaTree(int number[],int Length){BiTree BT;int i=0;BT=createNode();//if( NULL==BT )//return NULL ;BT->Data=number[i++]; BiTree m[10],temp;int head=0,last=0;m[last++]=BT;while(head-last){temp=m[head++];if(i<Length){if(number[i]!=-1){temp->Left=createNode();temp->Left->Data=number[i];m[last++]=temp->Left;}i++;}if(i<Length){if(number[i]!=-1){temp->Right=createNode();temp->Right->Data=number[i];m[last++]=temp->Right; }i++;}}return BT; } int flag=0; //如果每層都定義一個flag=0的話那么每次遞歸的時候 flag都是從0開始 無法達到flag++de 效果 void PreorderTraversal( BiTree BT ){if(BT){flag++;if(flag==N)printf("%d",BT->Data);else printf("%d ",BT->Data);PreorderTraversal(BT->Left);PreorderTraversal(BT->Right);} } void InorderTraversal( BiTree BT){if(BT){InorderTraversal(BT->Left);flag++;if(flag==2*N)printf("%d",BT->Data);elseprintf("%d ",BT->Data);InorderTraversal(BT->Right);} } void PostorderTraversal( BiTree BT ){if(BT){PostorderTraversal(BT->Left);PostorderTraversal(BT->Right);flag++;if(flag==3*N)printf("%d",BT->Data);elseprintf("%d ",BT->Data);} }int main(){queue<int>q,p;int i,a[10000][3],d[10000],j=0,k=1;scanf("%d",&N);for(i=0;i<N;i++){scanf("%d%d%d",&a[i][0],&a[i][1],&a[i][2]);}for(i=0;i<N-1;i++){for(j=0;j<N-1-i;j++)if(a[j][0]>a[j+1][0]){swap(a[j],a[j+1]);//表示一行的元素 }}for(i=0;i<N;i++){p.push(a[i][1]);q.push(a[i][2]);}//將兩個數組元素合并為一個數組 while(!q.empty()){d[k++]=p.front();//返回隊首元素 也就是出隊 p.pop();//出隊一個 就刪除一個 d[k++]=q.front();q.pop(); }d[0]=1;BiTree BT; BT=CreaTree(d,k);PreorderTraversal(BT);printf("\n");InorderTraversal(BT);printf("\n");PostorderTraversal(BT);}

總結

以上是生活随笔為你收集整理的7-4 二叉树的遍历!(简单) (25 分)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。