樹 尋找二叉排序樹的前驅後繼(中序遍歷)

2021-08-09 01:58:51 字數 1006 閱讀 6686

前驅結點:結點val值小於該結點val值並且值最大的結點

後繼結點:結點val值大於該結點val值並且值最小的結點

若乙個結點有左子樹,那麼該結點的前驅節點是其左子樹中val值最大的結點(即左子樹中最右邊的結點)

若乙個結點沒有左子樹

若該結點是其父結點的右孩子,那麼該結點的前驅結點即為其父結點。

若該結點是其父結點的左孩子,那麼需要沿著其父結點一直向樹的頂端尋找,直到找到乙個結點p,p結點是其父結點q的右孩子,那麼q就是該結點的前驅結點。

舉例分析

以橙色方框中的子樹(1,5,3,2,4)為例

若乙個結點有右子樹,那麼該結點的後繼節點是其右子樹中val值最小的結點(即右子樹中最左邊的結點)

若乙個結點沒有右子樹

若該結點是其父結點的左孩子,那麼該節點的後繼結點即為其父節點。

若該結點是其父結點的右孩子,那麼需要沿著其父結點一直向樹的頂端尋找,直到找到乙個結點p,p結點是其父結點q的左孩子,那麼q就是該結點的前驅結點。

舉例分析:

以紫色方框中的子樹(5,3,2,4)為例。

node*

front

(tree &t, node *x)

// 尋找結點x的中序前驅q

return q;

}else

return q;

}}

node*

back

(tree &t, node *x)

// 尋找結點x的中序後繼q

return q;

}else

return q;

}}

參考內容:(本文對原內容進行了補充和更正)

線索二叉樹(找前驅 後繼)

建立線索的初衷就是為了在乙個結點中能夠更方便找到前驅結點和後繼結點。中序線索二叉樹 先序線索二叉樹 後序線索二叉樹 找到以p為跟的子樹中,第乙個被中序遍歷的結點 threadnode firstnode threadnode p 在中序線索二叉樹中找到結點p的後繼結點 threadnode next...

二叉查詢樹的中序後繼

給定乙個二叉查詢樹 什麼是二叉查詢樹 以及乙個節點,求該節點在中序遍歷的後繼,如果沒有則返回null 樣例 1 輸入 node with value 1 輸出 2 解釋 1 2樣例 2 輸入 node with value 1 輸出 2 解釋 2 1 3二叉樹的表示 o h 其中h是bst的高度。保...

樹和二叉樹4 前驅和後繼

二叉樹的幾何結構和遍歷路徑,是查詢前驅和後繼的基礎。幾何結構千變萬化,但單個結點必然和至多3點鄰接 左 或右 父,左子和右子。按照 x 型助記,交叉點為研究物件。為求結點n的前驅結點p和後繼結點s,設n的左子l,右子r和父f fl,f的左子,fr,f的右子 若n是f的左子,則f是n的右父 若n是f的...