我正在编写一个Haskell函数,用于从二叉搜索树中删除节点。
我知道根据目标父节点的子节点数量需要执行的操作规则。
没有孩子 - 删除, 1个孩子 - 用孩子替换, 2个孩子 - 在右子树中找到最小值并替换节点的值, - 然后递归地从右子树中删除最小值。
没有孩子 - 删除, 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 tree@(MakeNode left value right)
| string > value = MakeNode left value (add string right)
| string < value = MakeNode (add string left) value right
| otherwise = tree
我无法弄清楚为什么treeBuilder也不能正确工作。它只是将字符串斜向右下打印出来。