二叉樹的基本演算法

2021-08-13 17:42:33 字數 1988 閱讀 1006

二叉樹的遍歷

求二叉樹的深度

多叉樹轉二叉樹

輸入乙個二叉樹的先序串,輸出以括號形式表示的而叉樹。如果結點的子樹為空,先序串的對應位置為空格符。
第1行:先序串 (結點數≤26,以單個大寫字母表示)
第1行:二叉樹的括號形式
ab c  d
a(b( ,c( , )),d( , ))
#include

#include

char s[100];

int len,x;

void dg()

int main()

由於這裡只講二叉樹,所以沒有多叉樹的遍歷,但我推薦乙個部落格,裡面面有多叉樹的遍歷方法(其實多叉樹和二叉樹的遍歷差不多)。

多叉樹的遍歷

給出一棵二叉樹,分別輸出先序、中序、後序遍歷結果。
第1行:結點數n(1<=n<=100)

以下若干行,每行3個整數,分別表示父結點、左孩子、右孩子。若沒有孩子,對應的整數為0.

第1行:樹根

第2行:先序遍歷結果,數字間用1個空格分開。

第3行:中序遍歷結果,數字間用1個空格分開。

第4行:後序遍歷結果,數字間用1個空格分開。

8

1 2 4

2 0 0

4 8 0

3 1 5

5 6 0

6 0 7

8 0 0

7 0 0

3

3 1 2 4 8 5 6 7

2 1 8 4 3 6 7 5

2 8 4 1 7 6 5 3

#include

int n,root,ll;//ll行末多餘空格,root根節點

struct shu

t[105];

void first(int x)

void middle(int x)

void last(int x)

int main()

for(int i=1;i<=n;i++)//找根節點

if(t[i].p==0) root=i;

printf("%d\n",root);

first(root);ll=0;//先序

middle(root);ll=0;//中序

last(root);//後序

return

0;

}

給出一棵二叉樹,求該二叉樹的深度。
第一行給出節點個數n。(n<100)

接下來n行,每行給出兩個數。依次表示節點1到節點n的左兒子和右兒子。如果左兒子為0,表示沒有左兒子,如果右兒子為0,表示沒有右兒子

乙個整數,表示二叉樹的深度。
7

2 34 5

6 70 0

0 00 0

0 0

3
#include

int n,ans,rot,mx=-1;//mx存樹的深度,ans存遞迴時節點深度

struct shu

a[105];

void ser(int x,int ans)//遞迴求深度

int main()

for(int i=1;i<=n;i++)

if(!a[i].p)//存根節點

ser(rot,1);//求深度

printf("%d\n",mx);

return

0;}

二叉樹樹的基本演算法

includeusing namespace std define ok 1 define error 0 define overflow 2 typedef char elemtype const int maxlength 30 結點個數不超過30個 typedef struct bitreen...

二叉樹演算法

include include include define elementtype int node structure constructor typedef struct bt binarytreenode,btroot function declear inorder btroot root...

二叉樹演算法

二叉樹的遍歷演算法 1.先序遍歷 對每乙個節點將其看作根節點按照根左右的順序進行遍歷。示例 void preordertree node root 先序遍歷二叉樹 return 2.中序遍歷 對每乙個節點將其看作根節點按照左根右的順序進行便利。示例 void inordertree node roo...