次の形式のカスタム ツリー データ型があるとします。
data BalTree a = Leaf | Node Integer (BalTree a) a (BalTree a) deriving (Eq, Show, Read)
サイズ 10 の新しいツリーを作成すると、次のようになります。
Node 10 (Node 5 (Node 2 (Node 1 Leaf 'Z' Leaf) 'Z' Leaf)
'Z'
(Node 2 (Node 1 Leaf 'Z' Leaf) 'Z' Leaf))
'Z'
(Node 4 (Node 2 (Node 1 Leaf 'Z' Leaf) 'Z' Leaf)
'Z'
(Node 1 Leaf 'Z' Leaf))
インデックスが与えられたときに要素をインオーダー トランスバーサルで取得するにはどうすればよいですか?
私の試み:
ind Leaf pos = Nothing
ind tree@(Node n lt x rt) pos
| pos < 0 = Nothing
| pos > treeSize-1 = Nothing
| pos < hTreeSize = ind lt pos
| pos == hTreeSize = Just x
| pos > hTreeSize = ind rt (pos - hTreeSize)
where treeSize = size tree
hTreeSize = treeSize `div` 2
これが順序どおりの横断であり、正しい結果が返されないかどうかは正確にはわかりません。