我正在尝试从这里实施解决方案到R但是我无法弄清楚如何在R中正确地做到这一点
check if a tree is a binary search tree
我将此树转换为列表:
1
/ \
2 2
/ \ / \
3 4 4 3
tree <- list("node"=1, "left"=list("node"=2, "left"=list("node"=3), "right"=list("node"=4)), "right"=list("node"=2, "left"=list("node"=3), "right"=list("node"=4)) )
使用data.tree
包我可以绘制它:
> data.tree::FromListSimple(tree, nodeName = "1")
levelName
1 1
2 ¦--left
3 ¦ ¦--left
4 ¦ °--right
5 °--right
6 ¦--left
7 °--right
我试图将Java版本从上面的链接转换为R但是我无法让它工作:
isBST <- function(node, mini, maxi) {
if(is.null(node)) return(TRUE)
if(node < mini | node > maxi) return(FALSE)
return(isBST(left, mini, node-1) & isBST(right, node+1, maxi))
}
isBST(tree, -10, 10)
答案 0 :(得分:1)
检查树是否为二进制的最简单方法是:
tree$isBinary
该函数利用了data.tree工具:
isBinary = function() {
all(2 == Get(Traverse(self, filterFun = function(x) !x$isLeaf), "count"))
}
显然,您也可以自己实施,例如与链接示例中的递归一样。虽然我不推荐它,因为递归通常在R中很慢。