2015-07-13 60 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