java 找到一节点的所有子节点 是不是得递归实现?

对于一个节点来说id,其中包含若干个子节点的位置信息ArrayListloc,通过该位置信息可以找到该子节点的子节点信息,依此类推。要求找到id的所有子节点,这是不是得用... 对于一个节点来说id,其中包含若干个子节点的位置信息ArrayList loc,通过该位置信息可以找到该子节点的子节点信息,依此类推。
要求找到id的所有子节点,这是不是得用递归实现?
麻烦给出一个递归程序。
是不是只能用递归实现?
还有别的方法吗?
递归的程序不会写,高手帮忙。
展开
 我来答
百度网友f683cf5
推荐于2018-04-05 · TA获得超过369个赞
知道小有建树答主
回答量:522
采纳率:0%
帮助的人:369万
展开全部
2L谁说必须用递归的,只是递归写起来简单罢了,迭代的方法一样OK;
深度优先或者广度优先都可以
LZ的问题用迭代的方法可以这样解决:
1。把当前节点(需要查找字节点的节点)压入一个堆栈,这步是初始化;
2。从堆栈中弹出一个节点,如果该节点是叶子节点,则这条路已经走不通了,如果是非叶子节点,那就把这个节点的所有子节点压入堆栈
3。重复第二步直到堆栈为空
上面三步就能遍历当前节点的所有字节点

递归的话:
f(node){
for(遍历node的所有子节点){
child=当前子节点
if(child为叶子节点){
..return
;}
else{
f(child)
}
}
}
lake_0415
2009-04-08 · TA获得超过199个赞
知道小有建树答主
回答量:367
采纳率:30%
帮助的人:76.3万
展开全部
1.java对于树的节点查询,大多数都是用递归实现的。

但是,老板,你的问题描述也太不严谨了。。根本没法写出你要的程序。只能根据你的字面意义写点注意点。
链表的节点跟树不一样,链表的节点指向只能是唯一的,一个父亲可以有很多儿子,但一个儿子只有有一个父亲。所以只能是子节点指着父节点。
所以你的位置信息ArrayList(看名字应该是链表),起始都是子节点,指向它的父节点。对于节点A是不是节点B的父节点,按照你说的,应该只能把以B开始链表上所有的节点跟A比较,有A就说明B是A的节点,没有则不是。
大概的伪代码如下:
for(i=0,i<n,i++) --一共有n个链表
for(j=0,j<m,j++) ----m为当前链表的lenghth
if(note[i][j]==id) -----找到父节点,记录这个i,j
do something;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tao881210
2009-04-08 · 超过25用户采纳过TA的回答
知道答主
回答量:108
采纳率:0%
帮助的人:80.3万
展开全部
必须通过递归来实现 说白了就是自己调用自己
main()
{
f(1);
getch();
}
f(int a)
{
printf("%d",a);
while(a<=4);
f(++a);
printf("No%d",a);
}
这是一个简单的例子 充分体现出了递归调用
递归调用就是在自己的内部再调用自己呀 这有什么不会写的 做一个判断 如果发现了父节点 就调用自己来添加下一层的子节点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
aaronswon
2009-04-08 · TA获得超过3481个赞
知道大有可为答主
回答量:1863
采纳率:0%
帮助的人:1597万
展开全部
//////////////今天刚写的一个重命名的小程序,里面有递归,看看吧

import java.io.*;

public class FileTest {
/////////////////////////////起始目录 更改前的后缀 更改后的后缀
public static void renameAll(File file, String ext, String fext){
File [] files = file.listFiles();
for(File f: files) {
if(f.isDirectory()) {
///如果是目录则递归调用自身
renameAll(f, ext, fext);
}
////是文件的话,改后缀
if(f.isFile()) {
String fileStr = f.toString();
if(fileStr.endsWith(ext)) {
int dotPoz = fileStr.indexOf(".");
fileStr = fileStr.substring(0, dotPoz + 1) + fext;
f.renameTo(new File(fileStr));
}
}

}
}

public static void main(String[] args) {
//把f:/ftest目录下所有的以txt结尾的文件改成rar结尾的
FileTest.renameAll(new File("f:/ftest"), "txt", "rar");
}

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
enxiaowei0
2009-04-08 · TA获得超过335个赞
知道答主
回答量:244
采纳率:0%
帮助的人:150万
展开全部
不用递归也可以,就是麻烦点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式