我正在做一个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