假設x為當前節點y為x的後繼結點
總結為四種情況
哎另一種情況不會說哎,如圖(c) 圖(d)
tree-successor(x)
if x.right ≠ nil
return tree-minimum(x.right)//圖(a) 圖(b)的情況
y = x.p
while y ≠ nil and x == y.right
//圖(c) 圖(d) 和 沒有後繼節點的情況
x = y
y = y.p
return y
假設x為當前節點y為x的前驅結點
上圖的四種情況正好與尋找後繼結點的情況相反,這裡就不再贅述了
tree-predecessor(x)
if x.right ≠ nil
return tree-maximum(x.left) //圖(a) 圖(b)的情況
y = x.p
while y ≠ nil and x == y.left //圖(c) 圖(d) 和 沒有後繼節點的情況
x = y
y = y.p
return y
演算法導論二叉搜尋樹 找尋二叉搜尋樹的前驅和後繼節點
找尋節點的前驅節點 public node predecessor node node return p 2.節點的左子樹不存在 while node.parent null node node.parent.left return node.parent 找尋節點的後繼節點 public node...
二叉搜尋樹的前驅和後繼詳細推導
後繼和前驅 定義 乙個結點的後繼,是大於x.key的最小關鍵字的結點。乙個結點的前驅,是小於x.key的最大關鍵字的結點。思路 找乙個結點的前驅或者後繼,無非是在三個區域找。首先分析前驅 滿足兩個條件,一是要小於當前鍵值,那麼只有lp和ls區可以找。二要求是其中最大的值。我們知道,對於lp來說,x ...
二叉樹遍歷的前驅和後繼
下面關於二叉樹三種遍歷方法的前驅和後繼作討論和總結。一 前序遍歷1.1 找後繼 若有左子女,則後繼是左子女 若無左子女,有右子女,則後繼是右子女 若既無左子女,又無右子女,則是一片葉子 若是其父母的左子女,且父母有右子女,則後繼是父母的右子女。若是其父母的左子女,且父母無右子女 若是其父母的右子女。...