java – 二叉树遍历的泛化操作?

我试图找到一种方法,我可以采取二叉树类并遍历其节点,在每个节点上执行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);
点赞