我有一种方法,我需要返回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);
}
}
答案 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;
}
这当然具有所有元素第二次存储在内存中的缺点。