二叉查詢樹 其 基本的執行操作的時間與樹的高度成正比。對於n
個節點的 完全二叉查詢樹 操作的最壞情況為 lgn但對n
個節點的線性鏈來說,操作的最壞情況為n。
總之,乙個隨機構造的二叉查詢樹的期望高度為 lgn, 基本動態集合操作的平均時間為lgn
某節點的左子樹節點值均小於該節點值,右子樹節點值均大於該節點值。
二叉搜尋樹 按 樹的中序遍歷 可以得到 從小到大排序的佇列
插入節點時,新寫了一種使用遞迴的方法來進行插入,這種方法比較容易理解,不用分多種情況討論
typedef struct treenode treenode;
treenode* search_recursion(treenode *t, int k)
if (k < t->data)
else
return search_recursion(t->right, k);
}treenode* search_nonrecursion(treenode *t, int k)
return t;
}treenode* minimum(treenode *t)
return t;}
treenode* maximum(treenode *t)
return t;}/*
15/ \
6 18
/ \17 20
/16
找16的直接前驅
1、找到17,判斷16是17的左孩子
2、找到18,判斷17是18的左孩子
3、找到15,判斷18是15的右孩子, return 15
# 完*/treenode* presuccessor(treenode *t)
treenode *y = t->parent;
while (y != null && t == y->left)// 當左節點為空時,一直向上找,直到找到某個節點是其父節點的左兒子時終止
t = y;
y = y->parent;
}return y;}/*
15/ \
6 18
/ \3 7\13
找13的直接後繼
1、找到7,判斷13是7的右孩子
2、找到6,判斷7是6的右孩子
3、找到15,判斷6是15的左孩子
# 完*/treenode* successor(treenode *t)
return y;}
// 這是非遞迴的插入
// 二叉查詢樹插入的位置一定是在葉子節點上,而不會插入到樹中間
// 所以只需要改變其指向就好
void insert(treenode *t, int x)
else
}node->parent = y;
if (y == null)
else if (x < y->data)
else
y->right = node;}
// 此外,還可以利用遞迴的方法來進行插入。這種方法容易理解,但是在我的**中,二叉查詢樹節點包括父
// 親節點,此時需要給插入節點的父親節點賦值,這點比較麻煩,因此建立了乙個新的函式用來插入
treenode* insert_recursion(treenode *t, treenode *node, treenode *p)
if (t->data >= node->data)
else t->right = insert_recursion(t->right, node, t);
return t;
}treenode* insert_recursion(treenode *t, int x)
node->parent = t->parent;
return insert_recursion(t, node, t->parent);}/*
分三種情況
1、 該節點沒有雙子女,則直接刪除該節點
2、 只有乙個子女,直接刪除,並將該子女直接用來代替該節點
3、 該節點有雙子女,則需要找到它的直接後繼,先刪除它的直接後繼,然後將直接後繼的內容代替要刪除節點的內容,
*/void delete(treenode *t, int x)
else
if (y->left != null)
z = y->left;
else
z = y->right;
if (z != null)
z->parent = y->parent; // 將要刪除節點y的子女指向y的父親
if (y->parent == null)
else if (y == y->parent->left)
y->parent->left = z;
else
y->parent->right = z;
if (y->data != x)
}
(資料結構)二叉查詢樹
樹,是一種資料結構。它是由n個有限節點組成乙個具有層次關係的集合。特點 樹的基本術語 節點的度 節點擁有的子樹的數目。葉子 度為零的節點。分支節點 度不為零的節點。樹的度 樹中節點的最大的度。層次 根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。樹的高度 樹中節點的最大層次。無序樹 如果...
資料結構 二叉查詢樹
使二叉樹成為二叉查詢樹的性質是,對於樹中的每個節點x,它的左子樹中所有關鍵字值小於x的關鍵字值,而它的右子樹中所有關鍵字值大於x的關鍵字值。這意味著,該樹所有的元素以某種統一的方式排序。二叉查詢樹是一棵特殊的二叉樹,二叉查詢樹中節點的結構與二叉樹種節點的結構相同,關鍵在於可以在二叉查詢樹上可以執行的...
資料結構 樹 二叉查詢樹
wiki 首先是名稱 二叉查詢樹英文叫binary search tree,這個在很多演算法題目中很常見所以要記住,特別是英文題目中。也叫做二叉排序樹,二叉搜尋樹等等。具體的定義比較官方,用自己的話說,首先它肯定是二叉樹,其次,當前節點的左子葉元素值比當前節點小,右子葉元素值比當前節點大,所以節點均...