Binary search tree
1.特 性
L < V < R (Inoder traversal)
執行查找, 刪除, 插入等操作的時間複雜度為O(log n)
一個由N個節點組成, 隨機構造的BST其高度為logN
但是一棵具有N個節點的線性鏈, 則此操作最壞情況運行時間為O(N)
2.操作
Search
TreeNode* BST::Search(int KEY){
TreeNode *current = root; // 將curent指向root作為traversal起點
while (current != NULL && KEY != current->key) {
// 兩種情況跳出迴圈:
// 1.沒找到 2.有找到
if (KEY < current->key{
current = current->leftchild; // 向左走
} else {
current = current->rightchild; // 向右走
}
}
return current;
}
Insert
void BST::InsertBST(int key, string element){
TreeNode *y = 0; // 準新手爸媽
TreeNode *x = 0; // 哨兵
TreeNode *insert_node = new TreeNode(key, element); // insert_node為將要新增的node
x = root;
while (x != NULL) { // 在while中, 以如同Search()的方式尋找適當的位置
y = x; // y先更新到原來x的位置
if (insert_node->key < x->key){ // 判斷x是要往left- 還是right- 前進
x = x->leftchild;
}else{
x = x->rightchild;
}
} // 跳出迴圈後, x即為NULL
// y即為insert_node的parent
insert_node->parent = y; // 將insert_node的parent pointer指向y
if (y == NULL){ // 下面一組if-else, 把insert_node接上BST
this->root = insert_node;
} else if (insert_node->key < y->key){
y->leftchild = insert_node;
} else{
y->rightchild = insert_node;
}
}
Last updated