ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-二进制搜索树实例化

2019-11-18 04:09:53  阅读:194  来源: 互联网

标签:casting nullpointerexception binary-search-tree java class


我已经通过使用树接口和递归创建了二进制搜索树(我知道使用Node类,我可以实现相同的方法)提供了添加和检查元素是否在二进制搜索树中的方法.

我面临的问题是实例化和显示BST的元素.

这是我的代码

树接口:

package bst;

public interface Tree<D extends Comparable>{

    public boolean isempty();
    public int cardinality();
    public boolean member(D elt);
    public NonEmptyBst<D> add(D elt);

}

EmptyBst类别:

 package bst;

 public class EmptyBst<D extends Comparable> implements Tree<D>{
    public EmptyBst(){
        D data=null;
    }

    @Override
    public boolean isempty() {
        // TODO Auto-generated method stub
        return true;
    }

    @Override
    public int cardinality() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public boolean member(D elt) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public NonEmptyBst<D>add(D elt) {
        // TODO Auto-generated method stub
        return new NonEmptyBst<D>(elt);
    }

}

NonEmptyBst类

 package bst;

 public class NonEmptyBst<D extends Comparable> implements Tree<D> {
    D data;
    D root;
    Tree<D> left;
    Tree <D>right;

    public NonEmptyBst(D elt){
        data=elt;
        root=elt;
        left=new EmptyBst<D>();
        right=new EmptyBst<D>();

    }
    NonEmptyBst(){
        D dataThis=this.data;
    }
    public NonEmptyBst(D elt,Tree<D>leftTree,Tree<D>rightTree){
        data=elt;
        left=leftTree;
        right=rightTree;
    }
    @Override
    public boolean isempty() {
        // TODO Auto-generated method stub
        return false;
    }
    @Override
    public int cardinality() {
        // TODO Auto-generated method stub
        return 1+left.cardinality()+right.cardinality();
    }



    public boolean member(D elt) {
        if (data == elt) {
            return true;
        } else {
            if (elt.compareTo(data) < 0) {
                return left.member(elt);
            } else {
                return right.member(elt);
            }
        }
    }

    public NonEmptyBst<D> add(D elt) {
        if (data == elt) {
            return this;
        } else {
            if (elt.compareTo(data) < 0) {
                return new NonEmptyBst(data, left.add(elt), right);
            } else {
                return new NonEmptyBst(data, left, right.add(elt));
            }
        }
    }
}

BinarySearchTree类

package bst;
import bst.Tree;
import bst.EmptyBst;
import bst.NonEmptyBst;

public class BinarySearchTree {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        NonEmptyBst abcd=new NonEmptyBst( "abc");
        NonEmptyBst ab=new NonEmptyBst(67);

        abcd.add("cry me a river");
        abcd.add("geeehfvmfvf");
        abcd.add("I'm Sexy and i know it");
        abcd.add("zzzzsd");
        abcd.add("zzzzsd");
        abcd.add("zzzfdsf");
        abcd.add("zzfedfrsd");
        abcd.add("tgrgdzsd");
        abcd.add("gtrgrtgtrgtrzzzzsd");
        abcd.add("zzzzsd");
        abcd.add("zdddzzzsd");
        abcd.add("zzzzsd");
        abcd.add("zzzzsd");

    }
}

**
我面临的特殊问题是在访问“叶节点”时,即使我在我的NonEmptyBst< D中插入了新的NonEmptyBst< D&quot ;,也遇到了异常,即ClassCastException. D>(D elt)构造函数我最终得到一个空指针异常

  Exception in thread "main" java.lang.NullPointerException 
    at java.lang.String.compareTo(Unknown Source) 
    at java.lang.String.compareTo(Unknown Source) 
    at bst.NonEmptyBst.add(NonEmptyBst.java:51) 
    at bst.NonEmptyBst.add(NonEmptyBst.java:54) 
    at bst.BinarySearchTree.main(BinarySearchTree.java:11)

解决方法:

除非您尝试遵循Null对象的设计模式,否则我不确定自己是否需要EmptyBst.

具体而言,如果data == null&&左==空&&正确== null.另外,这里不需要数据,因为它是局部变量并且从不引用.

public EmptyBst(){
    D data=null; 
}

D数据和D根之间有区别吗?

我认为您需要调整add方法以捕获递归的结果.

public NonEmptyBst<D> add(D elt) {
    if (data == elt) {
        return this;
    } else {
        if (elt.compareTo(data) < 0) {
            this.left = this.left.add(elt);
        } else {
            this.right = this.right.add(elt);
        }
    }

    return this;
}

标签:casting,nullpointerexception,binary-search-tree,java,class
来源: https://codeday.me/bug/20191118/2025610.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有