Java Binary Search树方法需要返回值而不是print

时间:2019-08-09 13:39:14

标签: java binary-search-tree

我有一种方法,我需要返回BST值而不是打印它们,以便可以将结果发送到jtextarea而不是打印它。 方法如下:

void gst_my_filter_init(GstMyFilter * filter);
void gst_my_filter_class_init(GstMyFilter * klass);

这是我尝试调用该方法的代码,以便我可以将其发送到JTextArea。...结果是jtextarea的名称

public void printInOrder(BSTNode node) {
    if (node != null) {
        nodecount++;
        printInOrder(node.left);
        System.out.println(node.word + " - " + node.data);
        if (node.data == 1)
            uc++;
        printInOrder(node.right);
    }
}

2 个答案:

答案 0 :(得分:0)

我认为最干净的方法是通过传递给方法的某种回调。
试试这个:

public interface BSTListener
{
  public void onNode(BSTNode node);
}

public void callbackInOrder(BSTNode     node,
                            BSTListener listener)
{
  if (node != null)
  {
    callbackInOrder(node.left, listener);
    listener.onNode(node);
    callbackInOrder(node.right, listener);
  }
}

然后,您实现此侦听器,该侦听器将节点添加到JTextArea:

BSTListener listener;
listener = new BSTListener()
{
  @Override
  public void onNode(BSTNode node)
  {
    results.append(node.word + " - " + node.data);
  }
};
bs.callbackInOrder(bs.ROOT, listener);

答案 1 :(得分:0)

如果您不喜欢回调解决方案,则可以尝试创建一种返回包含以下元素的列表的方法:

public List<String> listInOrder(BSTNode node)
{
  List<String> result = new ArrayList<String>();
  if (node != null)
  {
    result.addAll(listInOrder(node.left));
    result.add(node.word + " - " + node.data);
    result.addAll(listInOrder(node.right));
  }
  return result;
}

这当然具有所有元素第二次存储在内存中的缺点。