java - BST 中的搜索操作

标签 java tree binary-tree binary-search-tree

这是我使用 java 搜索元素的代码,即二叉搜索树。 当我执行搜索方法两次时,第二个元素的输出显示为 false。就像树中存在 10 一样,该元素也显示为 false。 代码太长,我不得不删除中序遍历和插入元素方法。

public class BinarySearchTree {
    class Node {
        int data;
        Node left, right;

        public Node(int item) {
            data = item;
            left = right = null;
        }
    }

    Node root;

    BinarySearchTree() {
        root = null;
    }

    // search data method

    boolean search(int data) {
        root = searchData(root, data);
        if (root != null) {
            return true;
        }
        return false;
    }

    Node searchData(Node root, int data) {
        if (root == null) {
            return null;
        }

        if (data == root.data) {
            return root;
        } else if (data < root.data) {
            return searchData(root.left, data);
        } else {
            return searchData(root.right, data);
        }
    }

    
    public static void main(String[] args) {
        BinarySearchTree bst = new BinarySearchTree();
        bst.insert(60);
        bst.insert(30);
        bst.insert(10);
        
        System.out.println("Number found : " + bst.search(60));
        System.out.println("Number found : " + bst.search(10));

    }
}

上述代码的控制台输出:- 发现数量:真实 找到的数量:错误

最佳答案

在方法search中,您重新分配行中的root

root = searchData(root, data);

为了避免这种情况,请将此行更改为

Node root = searchData(this.root, data);

创建新变量,而不是更改对象字段。
或者将您的方法更改为

boolean search(int data) {
    return searchData(root, data) != null;
}

关于java - BST 中的搜索操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68961240/

相关文章:

algorithm - 将每个叶子节点的右指针更改为二叉树中的下一个叶子节点

algorithm - 来自两个未排序数组的 BST

java - 同步静态方法

java - 具有2个值字段的自定义 HashMap VS在java中实现以数组作为值的 HashMap

python - 将 Trie 树节点作为参数传递 - 不起作用

c# - BST算法中的StackOverFlowException

JavaScript 递归验证

java - 部署到 Pivotal Cloud Foundry 后,访问 jar 内的 xml 等资源文件

java - 定义可重复时间间隔的表达式

java - 二叉树 - 带开关盒