我在看如何inorder + preorder构造独特的二叉树?并认为在伊德里斯写一个正式的证据会很有趣.不幸的是,我得到了相当坚持早,试图证明的方式找到树中的元素对应找到它在其序遍历的方式(当然,我还需要做的序遍历) .任何想法都会受到欢迎.我对完整的解决方案并不特别感兴趣 - 更多的是帮助我们开始正确的方向.
特定
data Tree a = Tip
| Node (Tree a) a (Tree a)
Run Code Online (Sandbox Code Playgroud)
我可以通过至少两种方式将其转换为列表:
inorder : Tree a -> List a
inorder Tip = []
inorder (Node l v r) = inorder l ++ [v] ++ inorder r
Run Code Online (Sandbox Code Playgroud)
要么
foldrTree : (a -> b -> b) -> b -> Tree a -> b
foldrTree c n Tip = n
foldrTree c n (Node l v r) = foldr c (v `c` foldrTree …Run Code Online (Sandbox Code Playgroud) 我有一棵树的遍历BFS和DFS遍历.如何从这些遍历中重建树?
例如:
BFS Traversal : 4 3 5 1 2 8 7 6
DFS Traversal : 4 3 1 7 2 6 5 8
Run Code Online (Sandbox Code Playgroud)
然后树会像吼叫:
4
/ \
3 5
/ \ \
2 1 8
| |
6 7
Run Code Online (Sandbox Code Playgroud) algorithm graph breadth-first-search tree-traversal depth-first-search