Tree SML遍历N元树

Tree SML遍历N元树,tree,sml,Tree,Sml,我是SML的新手 经过几次搜索,我仍然找不到任何与遍历n元树相关的资源。许多示例只是遍历一个简单的二叉树 说吧,我有 datatype 'a tree = leaf of 'a list | node of 'a tree list 我想遍历这个n元树并返回完全相同的树(val traverse=fn:'a tree->'a tree) 我该怎么办 这是我的密码: fun traverse (leaf x) = (leaf x) | traverse (node []) = node []

我是SML的新手

经过几次搜索,我仍然找不到任何与遍历n元树相关的资源。许多示例只是遍历一个简单的二叉树

说吧,我有

datatype 'a tree = leaf of 'a list | node of 'a tree list
我想遍历这个n元树并返回完全相同的树(
val traverse=fn:'a tree->'a tree

我该怎么办

这是我的密码:

fun traverse (leaf x) = (leaf x)
  | traverse (node []) = node []
  | traverse (node [x]) = node [x]
我正在努力添加最后一个模式,即(这是错误的)


感谢您的帮助。

由于
遍历
是一个从树到树的函数,您可以使用
映射
遍历列表中的所有子树(并且不需要特殊情况):

  | traverse (node (x::xs)) = traverse (node x) :: traverse (xs)
fun traverse (leaf x) = leaf x
  | traverse (node xs) = node (map traverse xs)