tree - 如何在列表中添加树的节点?
问题描述
我想在不连接列表的情况下将树的节点预先添加到列表中。
type 'a bintree = Nil | BT of 'a bintree * 'a * 'a bintree
let preorder t =
let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> addpre left (v :: list)
in addpre t [];;
let ab = BT (BT(Nil, 2, Nil),
7,
BT(BT(Nil, 5, Nil), 6, BT(Nil, 11, Nil)))
let r = preorder ab;;
如您所见,我知道如何从一个分支(左或右)添加节点,但我不知道如何从两个分支添加节点。你能帮我吗?
更新
我想我做到了
let preorder t = let rec addpre t list =
match t with
| Nil -> list
| BT (left, v, right) -> v :: addpre left (addpre right list)
in addpre t [];;
这样对吗?
解决方案
您可能想在计算完countpree
overright
之后再计算一遍left
。在左侧部分计算的本地绑定可能会有所帮助。就像是
| BT (left, v, right) ->
let leftpreoder = countpre left (v :: list)
in ...
推荐阅读
- node.js - 在下一个命令之前完成整个循环/forEach
- c# - 用于 MVC 和 Web API 的 ASP.NET Core JWT 身份验证
- .net - 估计并行运行的任务的时间量
- amazon-s3 - 如何在 nativescript 6.0 中使用 aws-sdk?
- excel - 如何从列中读取文件路径?
- ios - 无法将类型 '() -> _' 的值转换为指定类型 '[UIViewController]'
- python - 图形的 Python/Pandas 结构化/索引
- reactjs - 无法使用我的道具在 React 上读取未定义的属性“名称”
- android - 使用本机移动操作系统日期选择器设置日期的 Selenium 方法
- schema - 要求中列出的 OAS3 拼写错误或不存在的属性不会破坏模式的验证