我想知道如何從非搜索二叉樹中刪除一個節點。C - 從二叉樹中刪除節點
I.e.如果我有這樣的二叉樹:
....0.... ...1.....2... .......3.....4..
我希望做刪除節點,在值爲2
我想知道如何從非搜索二叉樹中刪除一個節點。C - 從二叉樹中刪除節點
I.e.如果我有這樣的二叉樹:
....0.... ...1.....2... .......3.....4..
我希望做刪除節點,在值爲2
如果它是一個有序樹(如搜索樹),你會通常會刪除節點(在您的示例中爲2
),並將其替換爲左側子樹(3
)的最右側葉子或右側子樹(4
)的最左側。如果它不是二叉查找樹,則可能可以做同樣的事情。它當然取決於樹的語義以及結構代表什麼(如果有的話)。如果結構沒有意義,那麼只需刪除要刪除的節點,並將其替換爲任何葉節點。
我應該將0至3的正確孩子連接起來,然後將3至4的正確孩子連接起來並釋放2? –
不要忘記2的左子樹!它可能包含的不僅僅是3個。如果你有一個遞歸例程來釋放分配(你可能需要在釋放節點2之前將它們設置爲NULL),請注意2的子指針。另一種選擇是將數據(3)從現在爲3的葉移至現在要刪除的值(2),然後釋放葉節點。請記住,替換必須來自葉節點。 (例如,如果你想刪除0,不要選擇2.) – e0k
我不明白架構和你的代碼在哪裏? – Stargateur