java - 如何获取树的所有叶节点?

标签 java

假设我在一棵树中有一个节点,如何获取所有祖先为该节点的叶节点?

我已经这样定义了 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;
    }
}

最佳答案

使用递归。

  • 如果节点本身是一片叶子,则返回它
  • 否则,返回其子节点的所有叶节点

像这样(未测试):

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

关于java - 如何获取树的所有叶节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31384894/

相关文章:

java - 如何修复计算二进制数幂但经常失败的方法?

java - 即使在添加 jackson-modules-java8 依赖项后也找不到 Jackson JavaTimeModule?

java - 如何使用 arrayList 存储 JFrame 中的信息并将其显示在 JOptionPane 中?

java - Java 8 中的条件 lambda 执行

java - 如何在 if 语句中使用异步任务结果

java - Apache POI 是否可以为 Microsoft Word 添加/删除水印

java - Bean 脚本框架

java - 如何记录整数数组并打印重复项的频率

java - 使用 java 单击 PrintPreview 打开远程服务器上的 PDF 文件

java - 这个函数是原子函数吗?