我正在做一個Haskell函數來從二叉搜索樹中刪除一個節點。 我知道需要採取行動的規則,具體取決於目標父母所擁有的子女人數 。從二叉搜索樹中刪除節點,haskell
沒有孩子 - 刪除, 1名兒童 - 與孩子取代, 2個孩子 - 找到最小的右子樹,並用值替換節點, - 然後,遞歸地從右邊刪除最小值子樹
data BST = MakeNode BST String BST
| Empty
deleteNode :: String -> BST
treeBuilder :: [String] -> BST
treeBuilder = foldr add Empty
add :: String -> BST -> BST
add new Empty = (MakeNode Empty new Empty)
add string [email protected](MakeNode left value right)
| string > value = MakeNode left value (add string right)
| string < value = MakeNode (add string left) value right
| otherwise = tree
不知道爲什麼treeBuilder工作不正常。它只是將字符串斜向下打印到右側。
有什麼代碼,你這麼遠嗎?你的特殊問題在哪裏?很多BST的問題聽起來很像家庭作業,所以我毫不猶豫地回答。 (不是說我們根本不回答作業問題,但他們應該以不同的方式回答學習問題。) – 2012-03-08 23:06:28
我只是不知道從哪裏開始。 – user1204349 2012-03-08 23:16:07
從最簡單的情況開始:'deleteNode x Empty = ...'會在那裏取代...,即從空樹中刪除任何東西會導致什麼結果? – Ingo 2012-03-08 23:38:11