gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:11:59 24 4
gpt4 key购买 nike

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

函数必须使用递归,如图所示,我想要做的是有一种方法可以将每个叶值保存到列表中,而不是打印出来。所以最后我得到了 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com