java - BSTSet 使用递归实现方法 contains(T value) 和 add(T value)

标签 java recursion set binary-search-tree abstract-data-type

package csci152.impl;

import csci152.adt.Set;
import csci152_classes.TreeNode;

public class BSTSet<T extends Comparable> implements Set<T> {

    private TreeNode<T> root;
    private int size;
    public BSTSet(){
        root = null;
        size = 0;
    }


    @Override
    public void add(T value) {
        if(!contains(value)){
           addHelper(value, root); 
        }
    }      

    private void addHelper(T value, TreeNode<T> n){
        if(n ==null){
            if(size ==0){
                root = new TreeNode<T>(value);
            }else{           
            **n = new TreeNode<T>(value);**}
            size++;

            return;
        }
        if(value.compareTo(n.getValue())>0){
            addHelper(value, n.getRight());
        }else if(value.compareTo(n.getValue())<0){
            addHelper(value,n.getLeft());
        }            
    }  




    @Override
    public boolean contains(T value) {
        return containsHelper(value, root);

    }

    private boolean containsHelper(T value, TreeNode<T> node){
             if(node ==null){
            return false;
        }
        if(value.compareTo(node.getValue())>0){
            return containsHelper(value, node.getRight());
        }else if(value.compareTo(node.getValue())<0){
            return containsHelper(value,node.getLeft());
        }return true;

    }

    @Override
    public boolean remove(T value) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public T removeAny() throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public int getSize() {
        return size;
    }

    @Override
    public void clear() {
        size = 0;
        root = null;
    }
    public String toString(){
        return toStringHelper(root);
    }

    private String toStringHelper(TreeNode<T> node){
        if(node == null){
            return "";
        }
        return toStringHelper(node.getLeft()) +
                node.getValue() +
                toStringHelper(node.getRight());
    }

}

带下划线的代码(n = new TreeNode(value);)无法正常工作。因此,当我运行代码时,大小会增加,但根保持为空并且不会创建新的 TreeNode。为什么是这样?我的错误在哪里?感谢您的帮助!!!

最佳答案

首先你应该调试你的程序,一步一步地检查它并检查每个变量。这是一个非常重要的练习。

但是要回答你的问题,第一次 root 为 null,然后你将其作为 n 发送,因此 n 也为 null,然后你用 TreeNode 初始化 null,它仍然为 null。

关于java - BSTSet 使用递归实现方法 contains(T value) 和 add(T value),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611211/

相关文章:

java - 关于 Java 类的建议

java - 如何在单击按钮显示新阶段时关闭当前阶段而不使新阶段的组件处于非 Activity 状态

c++ - 需要使用递归c++计算算术级数的总和

java - Codingbat递归到while循环?

Python 递归限制以及如何持续监控某些内容

Java - 使对象集合友好

java - Struts 从 2.2.1 升级到 2.5.30 后的 404 操作

java - 我怎样才能用 Java 泛型解决这个问题?

java - 在涉及毕达哥拉斯三元组和集合的算法中找不到我的错误

set - 用 python 订购东西......?