Data structures 验证树是否为二叉树
我认为一棵树要成为二叉树,它必须满足一棵r节点的树有r个子树的要求。 我将节点定义为秩、元素和二叉树列表的元组 我不知道如何检查一棵树是否是二叉树。我所能想到的就是制作一个递归函数,实现:Data structures 验证树是否为二叉树,data-structures,functional-programming,ocaml,Data Structures,Functional Programming,Ocaml,我认为一棵树要成为二叉树,它必须满足一棵r节点的树有r个子树的要求。 我将节点定义为秩、元素和二叉树列表的元组 我不知道如何检查一棵树是否是二叉树。我所能想到的就是制作一个递归函数,实现: 如果一个等级为0的树和一个空列表,那么它确实是一个二叉树 如果是秩r的树,那么我需要检查我的树是否由秩r-1,r-2,…,0的其他树组成。我走对了吗?我被困在这一点上。 以下是我到目前为止得到的信息: let valid_rank (Tree : tree) : bool = let curr_ra
let valid_rank (Tree : tree) : bool =
let curr_rank = (rank Tree) in
let rec helper t counter =
match t with
|Node(r,x,c) -> (if r <> (curr_rank - counter) then false
else (match c with
|[] -> true
|t1::ts -> helper t1 (counter + 1)))
in helper Tree 0
let verify_Bintree (t : tree) : bool =
(valid_rank t)
let valid_rank(Tree:Tree):bool=
让curr_秩=(秩树)在
让rec helper t计数器=
匹配
|节点(r,x,c)->(如果r(curr_秩-计数器),则为false
else(将c与
|[]->正确
|t1::ts->helper t1(计数器+1)))
在助手树0中
让我们验证\u Bintree(t:tree):bool=
(有效等级t)
这里我的观点是,在我的valid_rank函数中,当我在末尾“match c with…”时,我递归地调用t1上的helper,而不是列表ts的其余部分,因为helper接受的是树,而不是树列表。我不确定这是否有效谢谢。rang N的二叉树是一个包含N个范围为N-1、N-2、…、0的子项的树,每个子项都是二叉树。你在正确的轨道上,但有点偏离了轨道 助手应检查
c
的每个元素是否具有预期的范围,并且是有效的二叉树(递归到主函数)。所以助手应该是这样的
let Node(curr_rank, x, c) = tree in
let rec helper counter = function
| [] -> counter = -1
| n::ns -> if counter = rank n
then if valid_rank n
then helper (counter - 1) ns
else false
else false
in helper (curr_rank - 1) c
如果您不确定是什么定义了二叉树,请确保在尝试编写检查树是否为二叉树的函数之前理解它。到目前为止你有什么代码?什么是二叉树?这不是一个标准的术语,当你使用它的方式,你似乎正在使用它。你是说“二叉树”吗?在进一步讨论之前,你肯定想知道什么是二叉树:-)我在冈崎的第21页看到了一个定义,“纯功能数据结构”。秩为0的二叉树是单个节点。秩(r+1)二叉树由两个秩为r的二叉树组成,两个二叉树相互连接,其中一个是另一个的最左边的子树。可能这就是您要处理的。@eclecticist我不想公开发布我的代码,但目前我所拥有的(只是想法)是,我需要帮助函数来检查列组是否按顺序排列,是否所有列组都存在,以及是否遵守min heap属性。我还处于这个问题的早期阶段。@AdamRalphus“我不想公开发布我的代码”那么,我们不能帮助你,是吗?