2

次の例のようなツリーがあり、すべての葉がオブジェクトです。

[1]
 |--[2]
 |   |--[3]
 |   |--[4]
 |       |--[5]
 |--[6]

クラス構造は次のとおりです。

public class Node {
    private Integer id;
    private List<Node> children;
    public Integer getId()
    {
        return id;
    }
    public void setId(Integer id)
    {
        this.id = id;
    }
    public List<Node> getChildren()
    {
        return children;
    }
    public void setChildren(List<Node> children)
    {
        this.children = children;
    }
}

リーフ3を選択した場合、ブレッドクラムは1 2 3.このツリーからブレッドクラムを作成するにはどうすればよいですか?再帰的にツリーを作成する方法は知っていますが、パンくずリストに正しい葉を選択する方法がわかりません。

4

2 に答える 2

5

子には親ポインターが必要です。子を追加すると、親ノードは子の親ポインターを自分自身に設定できます。

public class Node {
    private Integer id;
    private Node parent;
    private List<Node> children;
    public Integer getId()
    {
        return id;
    }
    public void setId(Integer id)
    {
        this.id = id;
    }
    public List<Node> getChildren()
    {
        return children;
    }
    public void setChildren(List<Node> children)
    {
        this.children = children;
        for (Node child : children) {
            child.parent = this;
        }
    }
    public Node getParent() {
        return parent;
    }
}

これを使用して、選択したリーフ ノードからブレッドクラムを簡単に作成できます。

于 2012-06-20T07:23:40.390 に答える
1

作成中に各ノードにフィールドとして親を追加できます。このようにして、各オブジェクトからルートに移動できます。

于 2012-06-20T07:23:20.097 に答える