【问题标题】:How to implement keySet method in Binary Search Tree如何在二叉搜索树中实现 keySet 方法
【发布时间】:2015-10-27 01:57:19
【问题描述】:
import tree.BinaryTree;

public class TreeMap<K extends Comparable<K>, V> implements MyMap<K, V> {

    private BinaryTree<Element> map;
    java.util.Set<K> keys;
    private int size;


    @Override
    public java.util.Set<K> keySet() {
        inorder(map);
        return keys;
    }

    public String toString() {
        return map.toString();
    }

    private class Element {

        K key;
        V value;

        public Element(K key, V value) {
            this.key = key;
            this.value = value;
        }

        public int compareTo(Element that) {
            return this.key.compareTo(that.key);
        }

        public String toString() {
            return (key.toString());
        }
    }

    private void inorder(BinaryTree<Element> tree) {
        if (tree != null) {
            inorder(tree.getLeft());
            keys.add(tree.getRoot().key);
            inorder(tree.getRight());
        }

    }
}

大家好! :) 我在为我的密钥集添加密钥时遇到了很多麻烦。 如何将密钥附加到集合中? :/ 最糟糕的部分是它没有向我显示它所说的异常

at TreeMap.inorder(TreeMap.java:188)
at TreeMap.keySet(MyTreeMap.java:60)
at TreeMap.main(MyTreeMap.java:244)
Java Result: 1

这只是我的代码的一个 sn-p,除了我的 keySet/inorder 方法之外一切正常。我的代码第 188 行是

keys.add(tree.getRoot().key);

我已经搜索、重试并再次搜索,但无法到达任何地方。我会很感激你们能给我的任何帮助。 提前致谢! :)

这里是二叉树类

public class BinaryTree<E>
{
  private E root;
  private BinaryTree<E> left;
  private BinaryTree<E> right;

  public BinaryTree(E paramE, BinaryTree<E> paramBinaryTree1, BinaryTree<E> paramBinaryTree2)
  {
    this.root = paramE;
    this.left = paramBinaryTree1;
    this.right = paramBinaryTree2;
  }

  public BinaryTree(E paramE)
  {
    this(paramE, null, null);
  }

  public E getRoot()
  {
    return (E)this.root;
  }

  public BinaryTree<E> getLeft()
  {
    return this.left;
  }

  public BinaryTree<E> getRight()
  {
    return this.right;
  }

  public E setRoot(E paramE)
  {
    Object localObject = this.root;
    this.root = paramE;
    return (E)localObject;
  }

  public BinaryTree<E> setLeft(BinaryTree<E> paramBinaryTree)
  {
    BinaryTree localBinaryTree = this.left;
    this.left = paramBinaryTree;
    return localBinaryTree;
  }

  public BinaryTree<E> setRight(BinaryTree<E> paramBinaryTree)
  {
    BinaryTree localBinaryTree = this.right;
    this.right = paramBinaryTree;
    return localBinaryTree;
  }

  public String toString()
  {
    StringBuilder localStringBuilder = new StringBuilder("" + this.root);
    if (!isLeaf())
    {
      localStringBuilder.append("(");
      if (this.left != null) {
        localStringBuilder.append(this.left);
      }
      if (this.right != null) {
        localStringBuilder.append("," + this.right);
      }
      localStringBuilder.append(")");
    }
    return localStringBuilder + "";
  }

  public boolean isLeaf()
  {
    return (this.left == null) && (this.right == null);
  }
}

【问题讨论】:

  • 您能否发布完整的异常堆栈跟踪,我们需要查看 BinaryTree 实现。
  • 好的,我添加了 BinaryTree 类
  • Element 中,实例变量key 没有封装修饰符,但您正试图通过调用tree.getRoot().key 来访问它,就好像它是公共的一样。在这个实现中我还有很多其他的东西我会改变,但我认为你得到的(神秘)异常是由于在该范围内不可见时直接访问key。当我说发布完整的堆栈跟踪时,我的意思是也包括异常类型。

标签: java set binary-search-tree inorder keyset


【解决方案1】:

根据您的代码,TreeSet 从未被初始化

TreeSet ts = new TreeSet();

我认为应该可以解决它...

【讨论】:

  • 谢谢!我简直不敢相信我错过了它!
猜你喜欢
  • 2013-06-19
  • 2015-07-23
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2010-11-22
  • 2013-05-03
相关资源
最近更新 更多