二进制搜索树小计数练习

时间:2017-05-04 21:11:29

标签: java recursion binary-tree

我试图编写一个执行以下操作的方法: 给定BST,写一个递归函数BSTsmallcount,给定一个键值,返回值小于键的节点数。您的函数应该尽可能少地访问BST中的节点。

这就是我所拥有的:

public int BSTsmallcount(BinNode root, int key)
{
    int count = 0;
    if (root.right < key)
    {
        count += BSTsmallcount(root.left, key);
    }
    if (root.left < key)
    {
        count += BSTsmallcount(root.right, key);
    }
    return count;

}

但这是不正确的,因为您无法使用二元运算符。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Ya所以你不能只是将地址与值进行比较,我认为这就是你需要的

public int BSTsmallcount(BinNode root, int key)
{
    if(root == NULL) return 0;
    if (root.left.value < key)
        return 1 + BSTsmallcount(root.left, key);
    else
        return BSTsmallcount(root.left, key);
    if (root.right.value < key)
        return 1 + BSTsmallcount(root.right, key);
    else
        return BSTsmallcount(root.right, key);
}

类BinNode中必须存在一个属性,用于存储该节点的值。

答案 1 :(得分:1)

这应该有效:

public int BSTsmallcount(BinNode root, int key){
if(root == null) return 0;
if (root.value() < key)
    return 1 + BSTsmallcount(root.left(), key);
else
    return BSTsmallcount(root.left(), key);
}

更正: 1.应该为null而不是NULL 2.适当的递归方法只能检查其自己的基本情况。因此,无需检查孩子的价值。