java实现树的添加和取父节点,子节点;聚合树,实现选项菜单功能

package com.kane.test;


import java.util.ArrayList;
import java.util.List;


public class Tree {
private List<Node> list=new ArrayList<Node>();
/**
* 内部类
* @author buaa-pc
*
*/
class Node{
String data;
String parent;
}
public void add(String parent,String child) {
Node n=new Node();
n.data=child;
n.parent=parent;
list.add(n);
}
/**
* 获取父节点
* @param x
* @return
*/
public String getParent(String x) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).data.equals(x)) {//比较内容
return list.get(i).parent;
}
}
return null;
}
public List<String> getChild(String x) {
List<String> newList=new ArrayList<String>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).parent.equals(x)) {
newList.add(list.get(i).data);
}

}
return newList;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Tree a=new Tree();
a.add("世界","欧洲");
a.add("世界","亚洲");
a.add("世界","美洲");
a.add("亚洲","中国");
a.add("亚洲","日本");
a.add("亚洲","韩国");
a.add("中国","北京");
a.add("中国","江苏");
a.add("中国","上海");
a.add("中国","安徽");
System.out.println(a.getParent("安徽"));
System.out.println("-------------");
System.out.println(a.getChild("中国"));
}


}


package com.kane.test;


import java.util.List;
import java.util.Scanner;


public class MyMenu {
Tree tree=new Tree();
public void add(String parent,String child) {
tree.add(parent, child);//用了聚合的方式,没用继承实现add
}
public String go(String x) {
Scanner scanner=new Scanner(System.in);
for(;;){
List<String> lst=tree.getChild(x);//组合方式实现lst
if (lst.isEmpty()) {
return x;
}
System.out.println("-----------");

for (int i = 0; i < lst.size(); i++) {
System.out.println(i+"."+lst.get(i));
}
System.out.println("u.请返回上一级");
System.out.println("-----------");
System.out.println("请输入选择:");
String string=scanner.nextLine();
if (string.equals("u")) {
String x1=tree.getParent(x);
if (x1!=null) {
x=x1;
continue;
}
}
try {//防止输入异常
String x1=lst.get(Integer.parseInt(string));
x=x1;
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("请重新选择:");
}
}

}
/**
* @param args
*/
public static void main(String[] args) {
//创建菜单对象
MyMenu mm=new MyMenu();
mm.add("水果","苹果");
mm.add("水果","香蕉");
mm.add("水果","梨子");
mm.add("苹果","红富士苹果");
mm.add("苹果","国光苹果");
mm.add("国光苹果","富强1号");
mm.add("国光苹果","富强2号");
String t=mm.go("水果");
System.out.println("您选择:"+t);
}


}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值