java 找到一节点的所有子节点 是不是得递归实现?
对于一个节点来说id,其中包含若干个子节点的位置信息ArrayListloc,通过该位置信息可以找到该子节点的子节点信息,依此类推。要求找到id的所有子节点,这是不是得用...
对于一个节点来说id,其中包含若干个子节点的位置信息ArrayList loc,通过该位置信息可以找到该子节点的子节点信息,依此类推。
要求找到id的所有子节点,这是不是得用递归实现?
麻烦给出一个递归程序。
是不是只能用递归实现?
还有别的方法吗?
递归的程序不会写,高手帮忙。 展开
要求找到id的所有子节点,这是不是得用递归实现?
麻烦给出一个递归程序。
是不是只能用递归实现?
还有别的方法吗?
递归的程序不会写,高手帮忙。 展开
6个回答
展开全部
2L谁说必须用递归的,只是递归写起来简单罢了,迭代的方法一样OK;
深度优先或者广度优先都可以
LZ的问题用迭代的方法可以这样解决:
1。把当前节点(需要查找字节点的节点)压入一个堆栈,这步是初始化;
2。从堆栈中弹出一个节点,如果该节点是叶子节点,则这条路已经走不通了,如果是非叶子节点,那就把这个节点的所有子节点压入堆栈
3。重复第二步直到堆栈为空
上面三步就能遍历当前节点的所有字节点
递归的话:
f(node){
for(遍历node的所有子节点){
child=当前子节点
if(child为叶子节点){
..return
;}
else{
f(child)
}
}
}
深度优先或者广度优先都可以
LZ的问题用迭代的方法可以这样解决:
1。把当前节点(需要查找字节点的节点)压入一个堆栈,这步是初始化;
2。从堆栈中弹出一个节点,如果该节点是叶子节点,则这条路已经走不通了,如果是非叶子节点,那就把这个节点的所有子节点压入堆栈
3。重复第二步直到堆栈为空
上面三步就能遍历当前节点的所有字节点
递归的话:
f(node){
for(遍历node的所有子节点){
child=当前子节点
if(child为叶子节点){
..return
;}
else{
f(child)
}
}
}
展开全部
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;
但是,老板,你的问题描述也太不严谨了。。根本没法写出你要的程序。只能根据你的字面意义写点注意点。
链表的节点跟树不一样,链表的节点指向只能是唯一的,一个父亲可以有很多儿子,但一个儿子只有有一个父亲。所以只能是子节点指着父节点。
所以你的位置信息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;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
必须通过递归来实现 说白了就是自己调用自己
main()
{
f(1);
getch();
}
f(int a)
{
printf("%d",a);
while(a<=4);
f(++a);
printf("No%d",a);
}
这是一个简单的例子 充分体现出了递归调用
递归调用就是在自己的内部再调用自己呀 这有什么不会写的 做一个判断 如果发现了父节点 就调用自己来添加下一层的子节点
main()
{
f(1);
getch();
}
f(int a)
{
printf("%d",a);
while(a<=4);
f(++a);
printf("No%d",a);
}
这是一个简单的例子 充分体现出了递归调用
递归调用就是在自己的内部再调用自己呀 这有什么不会写的 做一个判断 如果发现了父节点 就调用自己来添加下一层的子节点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//////////////今天刚写的一个重命名的小程序,里面有递归,看看吧
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");
}
}
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");
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用递归也可以,就是麻烦点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询