Java递归-将树转换为字符串

时间:2019-04-22 19:45:01

标签: java recursion

我正在编写一个TreeToHtmlConverter,它具有一个称为convert的公共静态函数。该函数遍历树以构建HTML字符串并返回。

示例代码:

public class TreeToHtmlConverter {
  public static String convert(TreeNode root) {
    if (root.isLeaf()) {
      return "leaf";
    }

    String childHtml = root.getChildren().stream()
        .map(child -> convert(child))
        .collect(Collectors.joining());

    return "<p>" + childHtml + "</p>";
  }
}

我需要向函数添加行为,以使其返回HTML字符串以及HTML中包含的特殊元素列表(保持通用性,因为列表中的内容并不重要)。此外,将来可能会添加一些行为,其中在构建HTML时我需要收集其他信息。主要目标之一是不添加HTML的另一遍历来收集此信息并一次性获得所有信息。

想法

public class TreeToHtmlConverter {
  public static TreeToHtmlResult convert(TreeNode node) {
    List<String> specialTags = new ArrayList<>();
    String html = convert(node, specialTags);

    return new TreeToHtmlResult(html, specialTags);
  }

  public static String convert(TreeNode node, List<String> specialTags) {
    if (node.isLeaf()) {
      return "leaf";
    }

    if (node.isSpecial()) {
      specialTags.add(node.getName());
    }

    String childHtml = node.getChildren().stream()
        .map(child -> convert(child, specialTags))
        .collect(Collectors.joining());

    return "<p>" + childHtml + "</p>";
  }

  private static class TreeToHtmlResult {
    private final String html;
    private final List<String> specialTags;

    public TreeToHtmlResult(String html, List<String> specialTags) {
      this.html = html;
      this.specialTags = specialTags;
    }

    public String getHtml() {
      return this.html;
    }

    public List<String> getSpecialTags() {
      return this.specialTags;
    }
  }
}

任何想法都值得赞赏,请告诉我是否可以提供更多信息来帮助指导对话。

0 个答案:

没有答案