2016-12-16 227 views
-1

我想知道如何從非搜索二叉樹中刪除一個節點。C - 從二叉樹中刪除節點

I.e.如果我有這樣的二叉樹:

....0.... 
...1.....2... 
.......3.....4.. 

我希望做刪除節點,在值爲2

+0

我不明白架構和你的代碼在哪裏? – Stargateur

回答

0

如果它是一個有序樹(如搜索樹),你會通常會刪除節點(在您的示例中爲2),並將其替換爲左側子樹(3)的最右側葉子或右側子樹(4)的最左側。如果它不是二叉查找樹,則可能可以做同樣的事情。它當然取決於樹的語義以及結構代表什麼(如果有的話)。如果結構沒有意義,那麼只需刪除要刪除的節點,並將其替換爲任何葉節點。

+0

我應該將0至3的正確孩子連接起來,然後將3至4的正確孩子連接起來並釋放2? –

+0

不要忘記2的左子樹!它可能包含的不僅僅是3個。如果你有一個遞歸例程來釋放分配(你可能需要在釋放節點2之前將它們設置爲NULL),請注意2的子指針。另一種選擇是將數據(3)從現在爲3的葉移至現在要刪除的值(2),然後釋放葉節點。請記住,替換必須來自葉節點。 (例如,如果你想刪除0,不要選擇2.) – e0k