資料結構實驗三 二叉樹的層次遍歷
實驗五 二叉樹
一、實驗目的
掌握二叉樹的建立、遍歷的方法。
二、實驗內容
利用二叉樹的擴充套件前序遍歷序列建立二叉樹,然後實現二叉樹的前序、中序和後序遍歷。
三、實驗內容準備
在二叉樹做任何運算之前,二叉樹本身必須存在。因此,首先必須建立二叉樹,實際上就是建立二叉樹的儲存結構。建立二叉樹的儲存結構就是建立二叉連結串列。例二叉樹的擴充套件前序序列為"ABC##D#E##F##",則由此建立的二叉樹的中序序列為:CBDEAF,後序序列為:CEDBFA
原始碼:
#include <iostream> #include <stdio.h> #include <stdlib.h> #include <queue> using namespace std; #define N 100 char *a="ABC##D#E##F##"; /*擴充二叉樹樹t的前序序列*/ typedef struct node /*二叉樹結構定義*/ { char data; struct node *lchild,*rchild; } binnode; typedef binnode *bintree; /*函式creatbintree (根據擴充二叉樹的前序序列(字串a)建立二叉樹t的儲存結構*/ bintree creatbintree() { char ch=*a++; bintree t; if (ch=='#') t=NULL; else { t=(bintree)malloc(sizeof(binnode)); t->data=ch; t->lchild=creatbintree(); t->rchild=creatbintree(); } return t; } void preorder(bintree t) /*前序遞迴遍歷二叉樹*/ { if (t) { printf("%c",t->data); preorder(t->lchild); preorder(t->rchild); } } void inorder(bintree t) /*中序遞迴遍歷二叉樹*/ { if (t) { inorder(t->lchild); printf("%c",t->data); inorder(t->rchild); } } void postorder(bintree t) /*後序遞迴遍歷二叉樹*/ { if (t) { postorder(t->lchild); postorder(t->rchild); printf("%c",t->data); } } /*************************************二叉樹的層次遍歷***********************************/ queue<binnode*>q; void ccc(bintree t) { if(t!=NULL) { q.push(t); while(!q.empty()) { cout<<q.front()->data; if(q.front()->lchild!=NULL) q.push(q.front()->lchild); if(q.front()->rchild!=NULL) q.push(q.front()->rchild); q.pop(); } } } /*****************************************************************************************/ int main() { bintree t; t=creatbintree(); /*建立二叉樹t的儲存結構*/ printf("二叉樹的前序序列為:\n"); preorder(t); /*前序非遞迴遍歷二叉樹*/ printf("二叉樹的中序序列為:\n"); inorder(t); /*中序非遞迴遍歷二叉樹*/ printf("二叉樹的層次遍歷序列為:\n"); ccc(t); /*中序非遞迴遍歷二叉樹*/ return 0; }
四、實驗要求:
1、 理解並除錯好本程式;
2、 增加二叉樹的按層遍歷演算法並重新除錯。
3、 寫出實驗報告。
二叉樹的層次遍歷(STL實現)
/*************************************二叉樹的層次遍歷***********************************/ queue<binnode*>q; void ccc(bintree t) { if(t!=NULL) { q.push(t); while(!q.empty()) { cout<<q.front()->data; if(q.front()->lchild!=NULL) q.push(q.front()->lchild); if(q.front()->rchild!=NULL) q.push(q.front()->rchild); q.pop(); } } } /*****************************************************************************************/
相關推薦
資料結構實驗之二叉樹的遍歷
【實驗內容】 建立一個二叉樹,對這棵動態二叉樹進行分析,將其用靜態二叉連結串列表示。二叉樹的動態二叉連結串列結構中的每個結點有三個欄位:data,lchild,rchild。靜態二叉連結串列是用陣列作為儲存空間,每個陣列元素儲存二叉樹的一個結點,也有三個欄位:
資料結構實驗三 二叉樹的層次遍歷
實驗五 二叉樹 一、實驗目的 掌握二叉樹的建立、遍歷的方法。 二、實驗內容 利用二叉樹的擴充套件前序遍歷序列建立二叉樹,然後實現二叉樹的前序、中序和後序遍歷。 三、實驗內容準備 在二叉樹做任何運算之前,二叉樹本身必須存在。因此,首先必須建立二叉樹,實際上
資料結構——3.3 二叉樹的遍歷及樹的同構
一、二叉樹的遍歷 1、先序遍歷 遍歷過程為: 1)訪問根結點 2)先序遍歷其左子樹 3)先序遍歷其右子樹 這樣的一種遍歷過程,其實也是一種遞迴的思想。 A(BDFE)(CGHI),先序遍歷=> ABDFECGHI 2、中序遍歷 遍歷過程為: 1)中序遍歷其左子樹
《大話資料結構8》—— “ 二叉樹的遍歷”
二叉樹的遍歷 ● 是指從根節點出發, 按照某種次序依次訪問二叉樹中所有結點, 使得每個結點被訪問一次且僅被訪問一次。 ● 二叉樹的遍歷方式很多,如果我們限制了從左到右的習慣方式,那麼主要就分為四種: (1 )前序
資料結構實驗之二叉樹三:統計葉子數 SDUT 3342
#include <stdio.h> #include <string.h> struct node { char data; struct node *l,*r; }; struct node *root; char st[51]; int i; in
【二叉樹】SDUT 3342 資料結構實驗之二叉樹三:統計葉子數
Problem Description 已知二叉樹的一個按先序遍歷輸入的字元序列,如abc,,de,g,,f,,, (其中,表示空結點)。請建立二叉樹並求二叉樹的葉子結點個數。 Input 連續輸入多組資料,每組資料輸入一個長度小於50個字元的字串。 Output 輸出
資料結構實驗之二叉樹三:統計葉子數
Problem Description 已知二叉樹的一個按先序遍歷輸入的字元序列,如abc,de,g,f, (其中,表示空結點)。請建立二叉樹並求二叉樹的葉子結點個數。 Input 連續輸入多組資料,每
資料結構實驗之二叉樹三:統計葉子數(有返回值版)
Problem Description 已知二叉樹的一個按先序遍歷輸入的字元序列,如abc,de,g,f, (其中,表示空結點)。請建立二叉樹並求二叉樹的葉子結點個數。 Input 連續輸入多組資料,每組資料輸入一個長度小於50個字元的字串。 Output 輸出
資料結構實驗之二叉樹三:統計葉子數 SDUT 3342
#include <stdio.h> #include <string.h> struct node { char data; struct node *l,*
SDUT OJ 資料結構實驗之二叉樹三:統計葉子數
資料結構實驗之二叉樹三:統計葉子數Time Limit: 1000 ms Memory Limit: 65536 KiBProblem Description已知二叉樹的一個按先序遍歷輸入的字元序列,如
資料結構實驗之二叉樹六:哈夫曼編碼(SDUT 3345)
題解:離散中的“最小生成樹(最優樹)”。 #include <bits/stdc++.h> using namespace std; void qusort(int l, int r, int a[]) { int x = a[l]; int i = l, j =
資料結構實驗之二叉樹一:樹的同構 (SDUT 3340)
題解:把原本結構體的左右子樹的型別定義成 int 型,用來存放這個結點的左右子樹的編號,分別建造兩棵二叉樹,按個比較,如果在第二棵樹中沒有找到,那麼就不用在判斷了。 #include <bits/stdc++.h> using namespace std; struct node
資料結構實驗之二叉樹八:(中序後序)求二叉樹的深度(SDUT 2804)
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char data ; struct node *l,*r; }; struct node *cr
資料結構實驗之二叉樹七:葉子問題(SDUT 3346)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; }; char a[100]; int num = 0; struct node
資料結構實驗之二叉樹四:(先序中序)還原二叉樹 (SDUT 3343)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; }; char a[100],b[100]; int n; struct node
資料結構實驗之二叉樹五:層序遍歷 (SDUT 3344)
#include <bits/stdc++.h> using namespace std; struct node { char data; struct node *lc, *rc; }; char s[505]; int num; struct node *cre
資料結構實驗之二叉樹二:遍歷二叉樹 SDUT 3341
#include <bits/stdc++.h> using namespace std; struct Tree { char data; struct Tree *right; struct Tree *left; }; char str[55]; in
SDUTOJ3344資料結構實驗之二叉樹五:層序遍歷
資料結構實驗之二叉樹五:層序遍歷 https://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/2711/pid/3344 Time Limit: 1000 ms Memo
3340--資料結構實驗之二叉樹一:樹的同構
現給定兩棵樹,請你判斷它們是否是同構的。 Input 輸入資料包含多組,每組資料給出2棵二叉樹的資訊。對於每棵樹,首先在一行中給出一個非負整數N (≤10),即該樹的結點數(此時假設結點從0到N−1編號);隨後N行,第i行對應編號第i個結點,給出該結點中儲存的1
資料結構實驗之二叉樹二:遍歷二叉樹
Problem Description 已知二叉樹的一個按先序遍歷輸入的字元序列,如abc,de,g,f, (其中,表示空結點)。請建立二叉樹並按中序和後序的方式遍歷該二叉樹。 Input 連續輸入多組資料,每組資料輸入一個長度小於50個字元的字串。 Outpu