2012-06-20 55 views
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如何從這個樹中創建麪包屑?我知道如何遞歸地創建樹,但我不知道如何選擇正確的葉子去做麪包屑。

回答

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; 
    } 
} 

然後,您可以輕鬆地使用它從選定的葉節點構建麪包屑。

+0

不錯,但你應該使用'child.setParent(this)'方法而不是直接指定字段('child.parent = this')。 – Baz

+0

@巴茲 - 是的,這將是一個改進。由於這一切都屬於課程本身(和私人),所以直接訪問受到開發者/維護者的控制。 –

+0

好的,公平的:) – Baz

1

您可以在創建過程中將父項作爲字段添加到每個節點。這樣你就可以從每個對象上去根。