如果找不到节点,它应该在二进制搜索树中进入什么级别

时间:2017-12-03 17:37:02

标签: java binary-search-tree depth

我试图在二进制搜索树中实现这个方法,它应该告诉我找到的元素的深度。

我的问题是,如果找不到元素,我的搜索应该如何返回它退出(或被放置)的树的级别。

即。如果树中不存在该节点,则应返回应插入树的级别。我不想回归" 0"如果在树中找不到该元素,而是应该放置它的级别。

If I searched for "7", the method should return "3" because that is the level where the search stopped and where in theory the "7" would be added

这是我到目前为止的代码,但它一直返回1.

public int depthSearch(Node root, int key){
    int depthLevel = 0;

    if (root==null || root.data==key){
        depthLevel++;
        return depthLevel;
    }

    if (root.data > key){
        depthSearch(root.left, key);
        depthLevel++;
        return depthLevel;
    }else{
        depthSearch(root.right, key);
        depthLevel++;
        return depthLevel;
    }
}

我的第二个问题是将深度级别计数器逻辑添加到我的find方法中是否有意义?

这是方法:

public boolean find(int id){
    Node current = root;
    while(current!=null){
        if(current.data==id){
            return true;
        }else if(current.data>id){
            current = current.left;
        }else{
            current = current.right;
        }
    }
    return false;
}

提前感谢您查看我的代码。我无法在SO上找到类似问题的主题。

1 个答案:

答案 0 :(得分:4)

  

我的第二个问题是添加深度级别是否有意义   我找到方法的反逻辑?

不,如果找到此方法,则返回true,否则返回false。你不能在Java中返回多个值(你可以创建一个既能容纳这两个值的对象又可以......呃......)。但即使你可以 - 一种方法应该做一件事!

对于depthSearch,实施存在问题: 你没有return递归调用的结果。

虽然可以轻松修复:

public int depthSearch(Node root, int key) {

    if (root == null || root.data == key) {
        return 1;
    }    
    else if (root.data > key) {
        return 1 + depthSearch(root.left, key);
    } else {
        return 1 + depthSearch(root.right, key);
    }
}