java - 将值保存到列表的简单递归函数

标签 java xml recursion

这个问题涉及到递归。考虑下面显示的程序(不是我的真实代码,但这解释了我遇到的问题)。

函数必须使用递归,如图所示,我想要做的是有一种方法可以将每个叶值保存到列表中,而不是打印出来。所以最后我得到了 List<String>当我打印出来时,我会得到每个叶节点的内容。

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<title text=\"title1\">\n" +
"    <comment id=\"comment1\">\n" +
"        <data> abcd </data>\n" +
"        <data> efgh </data>\n" +
"    </comment>\n" +
"    <comment id=\"comment2\">\n" +
"        <data> ijkl </data>\n" +
"        <data> mnop </data>\n" +
"        <data> qrst </data>\n" +
"    </comment>\n" +
"</title>\n";

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));

List<String> results = traverse(doc.getFirstChild());

//Want to print out results list here...

public static List<String> traverse(Node node){
    System.out.println(node.getNodeName());
    for(int i = 0; i < node.getChildNodes().getLength(); i++){
        traverse(node.getChildNodes().item(i));         
    }
    return null;
}

所以我的问题是,如何重写遍历函数,使其仍然使用递归,但将所有叶节点保存到列表中。然后它返回所有值的列表。

最佳答案

此函数将您使用遍历函数打印的相同字符串存储在列表中,并且您不需要将列表作为参数传递:

public static List<String> traverse( Node node ) {
        List<String> results = new LinkedList();
        results.add(node.getNodeName());
        if ( node.getChildNodes().getLength() > 0 ) {
            for ( int i = 0; i < node.getChildNodes().getLength(); i++ )
                results.addAll(traverse(node.getChildNodes().item(i)));
        }
        return results;
    }

关于java - 将值保存到列表的简单递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7231648/

相关文章:

java - Android字符串数组资源项替换

sql - 使用父节点上的 where 条件获取 XML 子节点的属性值

jquery - 如何递归 DOM 树?

java - 缓慢构建路径列表

Java 理解 Math.getExponent(Double)

compiler-construction - IntelliJ 12 无法与 JDK 1.7 一起正常工作

java - 在数组列表对象中查找字数

android - 修复了可滚动 RelativeLayout 中的 FAB 按钮

algorithm - 通过多次递归调用将普通递归转换为尾递归

java - GWT 的 @JsType - 我需要使用它做什么?