二叉搜尋樹的原始碼分析學習 筆記(基礎版)

2021-08-28 13:43:19 字數 2194 閱讀 1104

二叉搜尋樹結構

typedef

struct bst_tree_node

node,

* bst_tree;

有了二叉搜尋樹的儲存結構,那麼就應該知道怎麼建立

先建立乙個結點

static node * create_bstree_node (type key, node * parent, node * left, node * right)

建立好結點後,再插入到樹中。插入的基本要求要保持二叉搜尋樹的屬性不能被破壞

/**

* 演算法理解方式是找準位置,然後插入。哈哈,很有意思。切記:找準位置最重要

*/// tree是根結點 z是插入結點

static node *

bstree_insert

(bst_tree tree, node * z)

}//找到合適的位置後,再插入結點

z->parent = y;

if(y ==

null

) tree=z;

else

if(z->key < y->key)

y->left = z;

else

y->right = z;

return tree;

}

結論:y指向插入結點的位置,x指向的是y的子節點。因為帶插入結點肯定是葉子結點,所以x也是乙個nil結點。

二叉搜尋樹建立好了後,要開始遍歷,下面是三種遍歷方式。函式的形參是二叉搜尋樹的根節點指標。

//先序遍歷方式

void

preorder_bsttree

(bst_tree tree)

}//中序遍歷方式

void

inorder_bstree

(bst_tree tree)

}//後序遍歷方式

void

postorder_bstree

(bst_tree tree)

}

根據乙個值key查詢到對應的結點方法

/**

* 根據值 key,查詢對應的結點並返回對應的位址

* 第一步要判斷這個值 key是否合法,當然了這個是很簡單的

* 下面一步就體現出二叉搜尋樹的特點了

* 第一步到根節點,key如果大於根節點那麼到右結點下面去比較

* key如果小於根節點那麼到左結點下面去比較

* 就是這樣執行下去知道結點為空為止

*/node *

bstree_search

(bst_tree tree, type key)

取得二叉搜尋樹中某個結點的後繼結點,存在兩種情況

//查詢某個結點的後繼結點 比如 1 2 3 4 5,查詢3的後繼結點就是4

node *

bstree_successor

(node * x)

return y;

}

/**

* 二叉搜尋樹是乙個很有意思的東西,

* 如果要尋找是最大的結點,那麼就在右子樹里尋找,如果右子樹為空,那麼就是當前的根節點

* 同理:如果要尋找是最小的結點,那麼就在左子樹里尋找,如果左子樹為空,那麼就是當前的根節點

*///左子樹最左乙個結點值是最小的乙個結點

node *

bstree_minimum

(bst_tree tree)

//右子樹最右的乙個結點值是最大的乙個結點

node *

bstree_maximum

(bst_tree tree)

刪除結點的方法,在下一章,

參考內容:introduction to algorithms [mit press]

如果存在錯誤請email me: [email protected]

BST 二叉搜尋樹原始碼筆記

tree.h typedef int elementtype start fig4 16.txt ifndef tree h define tree h struct treenode 定義結構體節點 typedef struct treenode position 指向節點的指標 typedef ...

二叉搜尋樹C 實現原始碼

二叉搜尋樹的性質是 對樹中的每個結點x,它的左子樹的值小於x,它的右子樹的值大於x。binarytree.h include utility.h typedef struct treenode ptrtonode typedef struct treenode position typedef st...

二叉搜尋樹 二叉搜尋樹

題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...