下面貼出主要的**:
#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...