2018寒假總結第四節之二叉樹

2021-08-15 16:04:21 字數 1587 閱讀 6249

這個二叉樹啊,挺繞的,還有後面的平衡二叉樹,都是需要畫圖來輔助的,廢話少說,直接講知識。

首先,為什麼要建立這個二叉樹呢,是因為二叉樹能夠進行有效的查詢,避免重複查詢和無用查詢。具體操作先將所有的數或者字元全部以樹的形式建立起來,然後在找數或者找字元時按照數的構造來找。建樹的第一步是建立根,找到根後,然後再建立左子樹和右子樹。然後在去找下乙個根然後一直這樣下去。再說一下遍歷的種類:前序(先序),中序,後序,層序遍歷。

最基本的問題是首先把數建立起來,一般是中序和前序推後序和層序,或者中序和後序退前序或者層序,前序或者中序或者後續帶著空節點來建樹(節點數,葉子數)。

**如下:

//給前序和空節點輸出中序,後序,層次

#include

using namespace std;

char a[10000];

int l1;

struct node

;struct node *creat()

;//建樹

void qianxu(struct node *root)

//前序遍歷

}void zhongxu(struct node *root)

}//中序遍歷

void houxu(struct node *root)

}//後序遍歷

void cengxu(struct node *root)

}}//層次遍歷

int main()

;struct node *creat(int n,char *str1,char *str2)//指標的變化

if(n==0)

return null:

struct node *root;

else

root=new node;

root->data=str1[0]; //以前序為模板

int i;

for(i=0;ilchild=creat(i,str1+1,str2);//左子樹

root->rchild=creat(n-i-1,str1+i+1,str2+i+1);//右子樹

#include//後序和中序建樹和推前序(以中序為主心骨,後序作比較)

using namespace std;

char str1[100],str2[100];

struct node

;struct node *creat(int s1,int t1,int s2,int t2)

if(i<=t1)

else

return null;

return root;

};void f(struct node *root)

}//輸出前序

int  main()

如果是求深度或者高度類似,用遞迴

#include

using namespace std;

int l1=0;

void f(struct node *root)

return d;

}在這裡要區分一下二叉樹的高度和深度。高度,是從下往上開始數,到達目標節點的最短高度

深度,是從根節點往下開始數。感覺**差不多,哈哈哈,自己慢慢領悟吧,我就不多說了。

資料結構實驗之二叉樹四 還原二叉樹

time limit 1000ms memory limit 65536k 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入1個正整數n 1 n 50 為樹中結點總數,隨後2行先後給出先序和中序遍歷序列,均是長度為n的不包含重複英文本母 區分大小...

資料結構實驗之二叉樹四 還原二叉樹

time limit 1000ms memory limit 65536k 有疑問?點這裡 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入 1個正整數 n 1 n 50 為樹中結點總數,隨後 2行先後給出先序和中序遍歷序列,均是長度為 n的不包...

資料結構實驗之二叉樹四 還原二叉樹

給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。輸入資料有多組,每組資料第一行輸入 1個正整數 n 1 n 50 為樹中結點總數,隨後 2行先後給出先序和中序遍歷序列,均是長度為 n的不包含重複英文本母 區分大小寫 的字串。輸出乙個整數,即該二叉樹的高度。9 abdfghiec ...