-1

我想实现一个二叉树,但我在传递一个方法时遇到了困难。这是我的代码:有两个单独的类:xyzBTree. 的方法BTreexyz's 方法中使用test

class xyz{    //main class
    public static void main (String args[]){
    xyz obj = new xyz();
    obj.test(n);    //takes input (int) from user
    }

    public void test(int n){
        BTree p = new BTree();
        int d1 = p.depth(    //I want ot pass a node here);
            //My question: How to pass an argument here as "Node" to be received properly by the method??
        ....
        ....
    }
}
class BT Tree{     //another different class
    private Node root;
    private Node node;
    private int size;
    public static class Node {
        Node left;
        Node right;
        Node back;
        int data;
        int index;

    Node(int newindex) {
        left = null;
        right = null;
        back= null;
        data = 0;
        index = newindex;
    }
}
    public void BTree() {  //constructor
        root = null;
    }

    public int depth(Node node){     //Node pass will be correctly executed here
        if (node.index==root.index)
            return 0;
        else 
            return 1+depth(parent(node));
    }
}

我的问题是:如何通过 depth() 方法传递节点?

4

1 回答 1

0

我的问题是:如何通过 depth() 方法传递节点?

目前尚不清楚您的BTree课程设计是否旨在隐藏Node对象。

  • 如果Node不打算隐藏对象,则答案是“您像传递任何其他对象引用一样传递它”。这就引出了一个问题,即您从哪里获得节点引用,答案是您的BTree类必须提供允许外部代码(例如您的xyz类)获取节点引用的方法。这也意味着您的depth方法需要考虑Node目前不是“this”成员的可能性BTree

  • 如果Node要隐藏对象,则说明您的depth(Node)方法存在问题。

    • 如果外部调用代码无法获取将其Node设为公共方法的意义何在。它应该是一个私有方法吗?
    • 它应该是一个公共方法,但具有不同的语义吗?例如,它是否应该给出树中任何节点的最大深度,而不是给定节点的深度?(注意: 的实现depth()需要完全不同......)
于 2012-09-10T03:24:20.683 回答