24K純學渣的學習筆記 二叉樹的基本操作

2021-09-28 14:25:19 字數 2589 閱讀 5214

下面貼出主要的**:

#pragma once

#include

#include

typedef

struct bittree //結構體變數

bst,

*bstp;

intinsertdata

(struct bittree *bt,

int key)

//插入乙個資料,用於建立二叉樹

else

}else

if(keydata)

//判斷是否插到左子樹

else

}else

//如果該數值與節點值相等,不做任何處理,繼續插入下乙個值

}void

previsit

(bstp a)

//先序遍歷

else

return;}

void

inorder

(bstp a)

//中序遍歷

else

return;}

void

postorder

(bstp a)

//後序遍歷

else

return;}

void

visittree

(bstp x)

//綜合三種遍歷方式的子函式,在主函式呼叫

bstp creattree

(void

)//建立二叉樹的綜合性子函式,返回值為已建立二叉樹的根節點位址

else

do//進入迴圈體,開始遞迴單個新增資料

while

(num >=0)

;return anew;

//返回根節點位址

}void

insernumber

(bstp x)

//插入函式

intsubfind

(bstp x,

int f)

//查詢子函式,遞迴查詢,查詢成功返回1,否則返回0

else

else

if(fdata&&x->left!=

null

)else}}

void

printfind

(bstp x,

int f)

// 用於列印查詢成功後的祖先節點

else

else

if(f < x->data&&x->left !=

null)}

}void

findanum

(bstp x)

//查詢函式

else

return;}

void

myfree

(bstp x)

//銷毀函式

}//鎖定要刪除的資料的位置,返回該資料的首位址

bstp locatar

(bstp x,

int k)

/*否則進入遞迴環節*/

else

else

//右}

}//用於鎖定待刪除資料的雙親首位址

bstp locafath

(bstp x,

int k)

local = fath->left;

//為了進入迴圈

locar = fath->right;

//當不是葉子節點時,說明還可以往下尋找目標節點

while

(local !=

null

|| locar !=

null)if

(locar->data == k)

}else

if(local ==

null

&& locar !=

null)}

else

if(local !=

null

&& locar ==

null)}

if(fath->data > k)

else

}return fath;

}bstp delenode

(bstp t)

//t為待刪除節點 ,函式返回刪除後的子樹的根節點的首位址

if(t->left !=

null

)//t有左子樹

else

//t的左子樹有右子樹

q->right = s->left;

//更新,替換

t->data = s->data;

free

(s);

//釋放記憶體

return t;}}

else

if(t->right!=

null

)//思路與前面的一樣

else

q->left = s->right;

t->data = s->data;

free

(s);

return t;}}

}void

delete_anum

(bstp x)

//刪除乙個資料函式

else

}

如有錯誤,歡迎指出!

24K純學渣的學習筆記 單向鍊錶的簡單操作

本段程式用於單向鍊錶的常規操作 其中包含的操作有 隨機建立中指定範圍 由x和y確定 的是個隨機數 對已經建立的單向鍊錶排序 插入任意個數隨機數 刪除鍊錶中的乙個資料 銷毀整個鍊錶 查詢資料 遍歷資料 本段 僅用於初學者學習使用,如有不妥之處或 包含標頭檔案 include include inclu...

二叉樹學習筆記

二叉樹是樹的一種特殊結構,也是一種極為重要的樹,二叉樹最重要的操作是遍歷,即按照一定的順序訪問樹中的所有節點,常見的遍歷方式有 對遍歷來說,最容易想到的方式就是遞迴,遞迴 簡單,但是效率不高,需要的棧空間比較大,非遞迴的方法 較為複雜,不過效率較高。遞迴實現 void preordervisit b...

二叉樹學習筆記

1.訪問根節點 2.在訪問第 l 層時,將 l 1 層的節點按順序儲存到佇列中 3.進入下一層並訪問該層的所有節點 4.重複上述操作直到所有層都訪問完 時間複雜度 o n 空間複雜度o n 最壞的情況下,最後一層的所有節點可能在佇列中 void levelorder node root q.dele...