Haskell:从Bin树结构中获取从每个叶节点到根的路径

时间:2011-11-10 10:06:06

标签: haskell binary-tree

我有工作要做,但我不知道怎么做。 我有Bin树

    1
   /  \
  2    3
 / \  / \
4  5  6  7

我需要通过coord [i,j]找到从root到Node的方式。 例如:(2,2) - > [1,3,6]

fromRoot :: Int -> Int -> Tree a -> [a]

我为Index和BinTree编写了一些函数,但是如何创建主函数我不知道。

data Tree a = Node (Tree a) a (Tree a)

index :: Tree a -> Int -> Int -> a
index (Node _ x _ ) 0 _ = x
index (Node l x r) i j  | ((border i)<j) = index r (i-1) (j-(border i)-1)       
                        | otherwise = index l (i-1) j


border :: Int -> Int
border 0 = 0
border 1 = 0
border l = 2*(border (l-1))+1

myBuild :: Int  -> Tree Int
myBuild n = (Node (myBuild (n*2)) n (myBuild (n*2+1)))

1 个答案:

答案 0 :(得分:2)

由于这是作业,我不会提供完整的解决方案,但有一些提示:

  • 如何用树型代表空树?
  • 您如何表示示例树(或任何其他有限树)?

考虑主要功能:你不一定需要一个,一个好的开始方式就是运行

ghci your_source_file.hs

然后,您可以评估程序的某些部分,例如:

fromRoot 2 3 t1 -- if you have a t1 is a tree

除此之外,你可以写一个这样的主函数:

test_tree = ...   -- you need to fill in the dots (see questions above)

main :: IO ()
main = do print (fromRoot 2 2 test_tree)

如果您需要查找一些文档,请使用http://haskell.org/hoogle/