2015-07-13 88 views
6

假設我在樹中有一個節點,我怎樣才能得到其祖先是這個節點的所有葉節點?我已經定義了TreeNode,像這樣:如何獲取樹的所有葉節點?

public class TreeNode<T> 
{ 
    /** all children of the node */ 
    private List<TreeNode<T>> children = new ArrayList<TreeNode<T>>(); 
    /** the parent of the node, if the node is root, parent = null */ 
    private TreeNode<T> parent = null; 
    /** the stored data of the node */ 
    private T data = null; 

    /** the method I want to implement */ 
    public Set<TreeNode<T>> getAllLeafNodes() 
    { 
     Set<TreeNode<T>> leafNodes = new HashSet<TreeNode<T>>(); 
     return leafNodes; 
    } 
} 
+1

繼續穿越兒童,所有那些有空兒童名單的孩子都要離開?有什麼問題? – SMA

+0

葉節點應該有空的兒童列表;所以你可以在你的節點上實現一個方法isLeaf()。然後你將不得不遞歸檢查你的節點的所有孩子。 –

+0

問題解決了,謝謝大家 – Frank

回答

9

使用遞歸。

  • 如果節點本身是葉,返回它
  • 否則,返回其子項的所有葉子節點

像這樣(未測試):

public Set<TreeNode<T>> getAllLeafNodes() { 
    Set<TreeNode<T>> leafNodes = new HashSet<TreeNode<T>>(); 
    if (this.children.isEmpty()) { 
     leafNodes.add(this); 
    } else { 
     for (TreeNode<T> child : this.children) { 
      leafNodes.addAll(child.getAllLeafNodes()); 
     } 
    } 
    return leafNodes; 
} 
+0

這種方法不行。我曾嘗試過。但是,謝謝你們。 – Frank

+0

對不起,它有效,我犯了一個小錯誤。謝謝! – Frank

+0

完美無缺! – Frank