二叉樹的建立和基本操作

2021-08-25 09:00:36 字數 2659 閱讀 7025

二叉樹的基本單位和鍊錶一樣是以節點為單位

二叉樹的節點的儲存分為3個部分

1.存放資料     2.存放指向左子樹的指標   3.存放指向右子樹的指標

typedef char tdatetype;

typedef struct binarytreenode

btnode;

接下來是二叉樹的基本介面

btnode *binarytreecreate(tdatetype *a,int n,int *pi); //二叉樹的建立

void binarytreedestory(btnode* root); //二叉樹的銷毀

int binarytreesize(btnode* root); //節點數

int binarytreeleafsize(btnode* root); //葉節點數

int binarytreelevelksize(btnode* root, int k); //第k層的結點數

// 遍歷 遞迴

void binarytreeprevorder(btnode* root); //前序

void binarytreeinorder(btnode* root); //中序

void binarytreepostorder(btnode* root); //後序

void binarytreelevelorder(btnode* root); //層序

1.二叉樹的建立

btnode *buybtnode(tdatetype x)//建立乙個節點

btnode *binarytreecreate(tdatetype *a,int n,int *pi)

else

}

二叉樹的建立就是先化成子問題然後利用遞迴的方法完成建立      先建立乙個節點然後建立左子樹,右子樹,然後遞迴。

2.二叉樹的銷毀

void binarytreedestory(btnode* root)

if(root->right)

if(root != null)

} }

銷毀也是遞迴的思想也是化成子問題但是和建立的順序不一樣  因為如果銷毀根節點就無法訪問到左子樹和右子樹了  所以先銷毀左子樹然後右子樹最後銷毀根節點,注意最後不要忘記置成空,防止變成野指標。

3.二叉樹的節點數計算

int binarytreesize(btnode* root)

return binarytreesize(root->left) + binarytreesize(root->right) + 1;

}

同樣我們分解成子問題  總結點數等於左子樹+右子樹+根節點  然後利用遞迴就可以算出、

4.二叉樹的葉節點個數

int binarytreeleafsize(btnode* root)

if(root->left == null && root->right == null)

return binarytreeleafsize(root->left) + binarytreeleafsize(root->right);

}

和總節點的計算方法類似 ,區別在於加上限定的條件,每次遇到葉節點返回1 最後將左子樹的葉節點和右子樹的葉節點相加

5.第k層的節點數

int binarytreelevelksize(btnode* root, int k)

if(k == 1)

return binarytreelevelksize(root->left,k-1) + binarytreelevelksize(root->right,k-1);

}

計算第k層的節點數 我們可以看成計算第k-1層的左子樹+右子樹  然後利用遞迴解決

6.二叉樹的前中後序遍歷

void binarytreeprevorder(btnode* root)//前序

printf("%c ",root->date);

binarytreeprevorder(root->left);

binarytreeprevorder(root->right);

}void binarytreeinorder(btnode* root)//中序

binarytreeinorder(root->left);

printf("%c ",root->date);

binarytreeinorder(root->right);

}void binarytreepostorder(btnode* root)//後序

binarytreepostorder(root->left);

binarytreepostorder(root->right);

printf("%c ",root->date);

}

前中後序的遍歷方法分為遞迴和非遞迴 ,這次就先介紹遞迴的方法

遞迴的方法同樣是化成子問題前中後序遍歷的順序不一樣 化成的子問題就不一樣

前序:根節點  左子樹   右子樹

中序:左子樹 根節點 右子樹

後序:左子樹 右子樹 根節點

這就是二叉樹的建立和基本操作

二叉樹的建立和基本操作《一》

好久沒有寫部落格了,期末考試和課程設計讓我似乎快忘記了我是一名考研黨,最近事情都弄完了,可以安心準備考研了。考研進行時 二叉樹的。include includetypedef char elemtype typedef struct bt bt bt createbt 先序建立二叉樹 void pr...

二叉樹建立和遍歷

二叉樹建立遍歷規則 1.先序 根 左 右 2.中序 左 根 右 3.後序 左 右 根 二叉樹定義和輔助函式如下 struct node void visit int data int indata 先序建立二叉樹 struct node createbitree 先序建立乙個二叉樹 return t...

二叉樹建立和遍歷

include include 帶返回值建立二叉樹 最簡單方法 節點資料結構 struct bs node typedef struct bs node tree tree head,p,root 建立二元查詢樹 有返回值的可以不傳參 沒有的話如何傳參 輸入0代表到了某個葉子節點 tree crea...