我下面的一本書,介紹瞭如何從一個二叉搜索樹刪除節點,基本上如果我們有這樣的樹:方法來刪除一個二叉樹節點
10
/\
4 100
/\
1 8
/\
6 9
\
7
,我們要刪除節點4,書上說我應該:
- 查找其右子樹4的繼任者(這是6)
- 交易所4和6
- 從右子樹刪除6
- 附上4左子樹(這僅僅是1在這種情況下)到新節點6
因此我們得到
10
/\
6 100
/\
1 8
/\
7 9
不過,我想到了另一種方式來做到這一點:
- 找到4右子樹的最小元素(這是6)
- 附上4的左子樹,以6(它不會有一個左子)
- 將父母(10)附加到4的右側元素(8)。如果算法是遞歸的,我們可以只返回8
因此我們得到
10
/\
8 100
/\
6 9
/\
1 7
現在,我想問:我看到我的解決方案產生(至少在這種情況下)稍微不平衡的樹。
爲什麼我應該用我的書而不是我自己的書?看來我的解決方案更容易實現(至少從我的角度來看),但我更希望別人指出我是否錯了。
我瞭解自平衡樹,它們是這一個之後的章節。但我想在轉向下一個主題之前清楚一個主題;) – user129506