二叉查詢樹
定義: 一顆二叉查詢樹是一顆二叉樹,其中每個節點都含有乙個comparable的鍵,且每個節點的鍵都大於其左子樹中的任一鍵而小於右子樹的任一結點的鍵。
floor(){}//見後面
rank(){}
select(){}
}function compare(key1, key2)
if (key1 === key2)
if (key1 > key2)
}在n個隨機鍵構造的二叉查詢樹中,查詢命中平均所需的比較次數為2lnn
二叉查詢樹api
關於查詢不大於key的最大結點。每查到乙個小於或等於key的結點會出現兩種情況
1. 該結點無右子樹,則最大值即為該結點
2. 該結點有右子樹,則查詢右子樹滿足條件的結點,若不存在則該結點為最大key節點,若存在最大結點就是其右子樹的結點。
this.floor(node.right, key) || node ;
function
min(node) else
if (node == null)
while(root.left !== null)
return root;
} function
floor
(node, key)
let min = null;
if (node === null)
let cmp = compare(key, node.key);
if (cmp > 0) else
if (cmp < 0) else
}
rank()和select() 查詢key的位置
function
select
(node, k)
if(node == null || k > this.root.n)
let index = this.size(node.left);
if (index > k) else
if (index === k) else
}function
rank
(node, key)
if (node === null) return
0; let cmp = compare(key, node.key);
if(cmp > 0) else
if(cmp < 0) else
}
刪除操作
查詢被刪除結點t的後繼結點x。
將t的左子樹轉為x的左子樹,t已經刪除了x的右子樹作為x的右子樹。
將x作為原來t所在的位置。
function
deletemin
(node)
if(node == null)
if ( node.left == null )
node.left = this.deletemin(node.left);
node.n = this.size(node.left) + this.size(node.right) + 1;
return node;
} function
delete
(node, key)
if(key == null || node == null)
let cmp = compare(key, node.key);
if(cmp > 0) else
if(cmp < 0) else else
node = x;
}node.n = this.size(node.left) + this.size(node.right) + 1;
return node;
}
查詢給定範圍的key
使用中序遍歷
function
keys
(node, queue, lo, hi)
if(node == null)
let cmp1 = compare(lo, node.key);
let cmp2 = compare(hi, node.key);
if(cmp1 > 0) this.keys(node.left, queue, lo, hi);
if(cmp1 >= 0 && cmp2 <= 0) queue.push(node.key);
if(cmp2 < 0) this.keys(node.right, queue, lo, hi);
}
(資料結構)二叉查詢樹
樹,是一種資料結構。它是由n個有限節點組成乙個具有層次關係的集合。特點 樹的基本術語 節點的度 節點擁有的子樹的數目。葉子 度為零的節點。分支節點 度不為零的節點。樹的度 樹中節點的最大的度。層次 根節點的層次為1,其餘節點的層次等於該節點的雙親的層次加1。樹的高度 樹中節點的最大層次。無序樹 如果...
資料結構 二叉查詢樹
使二叉樹成為二叉查詢樹的性質是,對於樹中的每個節點x,它的左子樹中所有關鍵字值小於x的關鍵字值,而它的右子樹中所有關鍵字值大於x的關鍵字值。這意味著,該樹所有的元素以某種統一的方式排序。二叉查詢樹是一棵特殊的二叉樹,二叉查詢樹中節點的結構與二叉樹種節點的結構相同,關鍵在於可以在二叉查詢樹上可以執行的...
資料結構 樹 二叉查詢樹
wiki 首先是名稱 二叉查詢樹英文叫binary search tree,這個在很多演算法題目中很常見所以要記住,特別是英文題目中。也叫做二叉排序樹,二叉搜尋樹等等。具體的定義比較官方,用自己的話說,首先它肯定是二叉樹,其次,當前節點的左子葉元素值比當前節點小,右子葉元素值比當前節點大,所以節點均...