检查树(嵌套列表)是否是二叉搜索树

时间:2018-03-05 09:30:31

标签: r tree binary-tree binary-search-tree

我正在尝试从这里实施解决方案到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)

1 个答案:

答案 0 :(得分:1)

检查树是否为二进制的最简单方法是:

tree$isBinary

该函数利用了data.tree工具:

isBinary = function() {
    all(2 == Get(Traverse(self, filterFun = function(x) !x$isLeaf), "count"))
}

显然,您也可以自己实施,例如与链接示例中的递归一样。虽然我不推荐它,因为递归通常在R中很慢。