0
BSTにリスト項目を右から左に挿入する方法があるかどうかは疑問でした。これまでのところ、左から右に項目を挿入できます。逆順BST挿入
コード:
Prelude> listToTree [4,2,6]
Node 4 (Node 2 Empty Empty) (Node 6 Empty Empty)
しかし、私は逆の順序たい:
-- Type constructor
data Tree a = Empty | Node a (Tree a) (Tree a)
deriving (Eq, Show)
-- inserts into BST
insert :: (Ord a) => a -> Tree a -> Tree a
insert x Empty = Node x Empty Empty
insert x (Node y l r)
| y == x = Node y l r
| y < x = Node y l (insert x r)
| y > x = Node y (insert x l) r
-- Converts list to a BST
listToTree :: (Ord a) => [a] -> Tree a
listToTree xs = foldl (\acc x -> insert x acc) Empty xs
私は現在達成しています何
Node 6 (Node 2 Empty (Node 4 Empty Empty)) Empty
私はどのように本当にわからないがこれを行うにはfoldl
を変更できます。このようなタスクのために再帰的アプローチが良いでしょうか?どんな種類の助けでも感謝します。
最も簡単な方法はおそらく 'listToTree xs = foldl(\ acc x - > insert x acc)Empty $ reverse xs'です。 –
@WillemVanOnsemありがとうございました。また、あなたができることがわかった 'listToTree [] = Empty listToTree(x:xs)= insert x(listToTree xs)' – RoadRunner
@WillemVanOnsemこれを答えとして入れて喜んでそれを受け入れることができますか? – RoadRunner