关于递归查询子节点

J2EE_ME 2014-05-26 12:08:58
又遇到这种问题了,求教。

我有一个class是这样

public class GeographicalArea {

private String name;
private ArrayList<GeographicalArea> subAreas; //这是子结点
private ArrayList<GeographicalArea> containedBy; //这是父节点

。。。 。。。

public GeographicalArea[] getAreayWithSubarea(){

//我要在这里实现返回所有的子节点



求助。。多谢
...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
vnvlyp 2014-05-26
  • 打赏
  • 举报
回复
昨天你才问的父节点吧。。今天又问子节点。。 你倒是自己思考一下啊,这么基本的问题任何一本关于这个的书都基本能讲得很明白了
J2EE_ME 2014-05-26
  • 打赏
  • 举报
回复
还是感谢你的热心帮助。 结帖了。
引用 4 楼 vnvlyp 的回复:
	public GeographicalArea[] getAreaWithSubarea() {
		ArrayList<GeographicalArea> list = this.getSubarea();
		GeographicalArea[] areas = new GeographicalArea[list.size()];
		int i = 0;
		for (GeographicalArea area : list) {
			areas[i++] = area;
		}
		return areas;
	}
	
	private ArrayList<GeographicalArea> getSubarea() {
		ArrayList<GeographicalArea> areas = new ArrayList<>();
		for (GeographicalArea area : this.subAreas) {
			areas.add(area);
			areas.addAll(area.getSubarea());
		}
		return areas;
	}
J2EE_ME 2014-05-26
  • 打赏
  • 举报
回复

private List<GeographicalArea> areaArray = new ArrayList<GeographicalArea>();
public void recursionFn(GeographicalArea area){
if(area.getSubAreas()!=null && area.getSubAreas().size() >0){
areaArray.add(area);
Iterator<GeographicalArea> childIT = area.getSubAreas().iterator();
while(childIT.hasNext()){
GeographicalArea node = (GeographicalArea)childIT.next();
recursionFn(node);
}
}else{
areaArray.add(area);
}

}

调整格式为java,方便大家看。
J2EE_ME 2014-05-26
  • 打赏
  • 举报
回复
我最后这么解决了。我没有办法把结果写进array 里,因为这个方法会被递归调用很多次,所以我重新写了一个class来递归。贴出来: private List<GeographicalArea> areaArray = new ArrayList<GeographicalArea>(); public void recursionFn(GeographicalArea area){ if(area.getSubAreas()!=null && area.getSubAreas().size() >0){ areaArray.add(area); Iterator<GeographicalArea> childIT = area.getSubAreas().iterator(); while(childIT.hasNext()){ GeographicalArea node = (GeographicalArea)childIT.next(); recursionFn(node); } }else{ areaArray.add(area); } }
引用 4 楼 vnvlyp 的回复:
	public GeographicalArea[] getAreaWithSubarea() {
		ArrayList<GeographicalArea> list = this.getSubarea();
		GeographicalArea[] areas = new GeographicalArea[list.size()];
		int i = 0;
		for (GeographicalArea area : list) {
			areas[i++] = area;
		}
		return areas;
	}
	
	private ArrayList<GeographicalArea> getSubarea() {
		ArrayList<GeographicalArea> areas = new ArrayList<>();
		for (GeographicalArea area : this.subAreas) {
			areas.add(area);
			areas.addAll(area.getSubarea());
		}
		return areas;
	}
vnvlyp 2014-05-26
  • 打赏
  • 举报
回复
	public GeographicalArea[] getAreaWithSubarea() {
		ArrayList<GeographicalArea> list = this.getSubarea();
		GeographicalArea[] areas = new GeographicalArea[list.size()];
		int i = 0;
		for (GeographicalArea area : list) {
			areas[i++] = area;
		}
		return areas;
	}
	
	private ArrayList<GeographicalArea> getSubarea() {
		ArrayList<GeographicalArea> areas = new ArrayList<>();
		for (GeographicalArea area : this.subAreas) {
			areas.add(area);
			areas.addAll(area.getSubarea());
		}
		return areas;
	}
J2EE_ME 2014-05-26
  • 打赏
  • 举报
回复
引用 1 楼 vnvlyp 的回复:
昨天你才问的父节点吧。。今天又问子节点。。 你倒是自己思考一下啊,这么基本的问题任何一本关于这个的书都基本能讲得很明白了
其实我根据你的方法已经实现了子结点的递归,但是只能print而已,怎么也写不进array里。。。。 不好意思。
J2EE_ME 2014-05-26
  • 打赏
  • 举报
回复
引用 1 楼 vnvlyp 的回复:
昨天你才问的父节点吧。。今天又问子节点。。 你倒是自己思考一下啊,这么基本的问题任何一本关于这个的书都基本能讲得很明白了
。。。。没想出来。。。。 那我继续想想。。。。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧