二叉樹搜尋樹概念
二叉搜尋樹是一種用於查詢操作的高效資料結構,最壞情況只需查詢乙個分支 的資料即可,而不用檢索所有資料,所以操作的複雜度為o(lg n).
#include"bitree.h"
typedef bitree bistree;
//初始化二叉搜尋樹,compare用於比較key1>key2?1:-1(= 0)
void bistree_init(bistree *tree, void(*compare)(const void *key1, const void *key2),
void(*destroy)(void *data));
//銷毀樹
void bistree_destroy(bistree *tree);
//插入節點,成功返回0,要插入的節點已存在返回1,否則-1
int bistree_insert(bistree *tree, const void *data); //複雜度lg n
//移除等於data的節點,成功返回0,否則-1
int bistree_remove(bistree *tree, const void *data); //複雜度lg n
//查詢對應data的節點,成功返回0,否則-1
int bistree_lookup(const bistree *tree, void **data); //複雜度lg n
//銷毀node節點開始的左分支
static void destroy_right(bistree *tree, bitreenode *node);
static void destroy_left(bistree *tree, bitreenode *node)
//釋放節點空間,size--
free((*position)->data);
free(*position);
*position = null;
tree->size--;
} return;
}//在樹tree的node節點開始插入data資料
static int insert(bistree *tree, bitreenode **node, const void *data)
else
else
}} else if(cmpval > 0)
else
}} else //如果node->data == data,則為資料衝突
}return 0;
}//在樹tree的node節點開始查詢data資料
static int lookup(bistree *tree, bitreenode *node,const void **data)
//比較插入節點和要插入資料的值
cmpval = tree->compare(*data, node->data);
if (cmpval < 0) //如果插入資料小於node->data,在node的左子樹尋找位置繼續比較
retval = lookup(tree, node->left, data);
else if (cmpval > 0) //如果插入資料大於node->data,在node的右子樹尋找位置繼續比較
retval = lookup(tree, node->right, data);
else //等於時,取出資料
return retval;
}void bistree_init(bistree *tree, int(*compare)(const void *key1, const void *key2), void(*destroy)(void *data))
void bistree_destroy(bistree *tree)
int bistree_insert(bistree *tree, const void *data)
int bistree_remove(bistree *tree, const void *data)
int bistree_lookup(bistree *tree, void **data)
二叉搜尋樹(C語言)
學習二叉搜尋樹的過程中,對於刪除操作中的兩個節點都存在的情況進行 編寫時,出現了疑惑,所以我著重講解一下刪除操作 首先進行資料的宣告 include includetypedef int data type 宣告元素型別 typedef struct bst nodebst t,bst p 傳入根節...
C語言 二叉搜尋樹
實現過程 二叉查詢樹 binary search tree 又 二叉搜尋樹,二叉排序樹 它或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。簡而言之...
C語言二叉搜尋樹
7 4 是否同一棵二叉搜尋樹 25 分 給定乙個插入序列就可以唯一確定一棵二叉搜尋樹。然而,一棵給定的二叉搜尋樹卻可以由多種不同的插入序列得到。例如分別按照序列和插入初始為空的二叉搜尋樹,都得到一樣的結果。於是對於輸入的各種插入序列,你需要判斷它們是否能生成一樣的二叉搜尋樹。輸入包含若干組測試資料。...