我试图找到一种方法,我可以采取二叉树类并遍历其节点,在每个节点上执行X量的内联操作,而不必一遍又一遍地重写相同的遍历代码.
我想如果
Java允许函数指针,这对我来说要简单得多……
基本上,我需要的是以下内容:
public class BinaryTreeNode {
//...
public void inOrderTraversalFrom(BinaryTreeNode node, /* ??? */ actions) {
if(node.left != null)
inOrderTraversalFrom(node.left);
/* do something with "actions" here */
if(node.right != null)
inOrderTraversalFrom(node.right);
}
}
…其中动作可以允许执行不同的方法,根据要在每个节点上执行的动作的类型接收不同的参数集.
一个很好的例子就是一个用于绘制这些节点的类可以被传递,接受一个Graphics对象作为它的一个参数,而一个类用于执行一些不需要图形的其他一系列动作. object作为参数,而是一组完全不同的参数.
这怎么可能?什么是最有活力的方式来执行此操作?
最佳答案 一种方法是:
action可以是接收Node并将Action应用于它的类的实例:
public interface Action{
public void apply(Node node){
// To be done in the classes that will implement
// this interface. If it's a graphic-display of the nodes, the apply
// method will call draw(node.value), for example
}
}
这条线:
/* do something with "actions" here */
应该换成
action.apply(node);
该方法的签名应更改为:
public void inOrderTraversalFrom(BinaryTreeNode node, Action action)
并且递归调用应该是:
inOrderTraversalFrom(node.left, action);