繁体   English   中英

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

[英]If node not found, what level should it go in the Binary Search Tree

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

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

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

如果我搜索“7”,该方法应返回“3”,因为这是搜索停止的级别,理论上将添加“7”

这是我到目前为止的代码,但它一直返回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上找到类似问题的主题。

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

不,如果找到此方法则返回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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM