要求自己写一个集合,集合名为Tree,实现以下功能:
//Tree:
//获取当前节点的父节点
//获取当前节点的子节点
//获取当前节点的同级节点
//获取当前节点的祖先节点
//获取当前节点的子孙节点
我只写除了前三个,后面的两个不知道怎么写了,各位大神帮忙啊。
下面是我写的部分代码:
package com.lyq;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Tree {
private Map<String, String> m1 = new HashMap<String, String>();// 保存所有节点
private Map<String, List<String>> m2 = new HashMap<String, List<String>>();// 保存子节点
private Map<String, List<String>> m3 = new HashMap<String, List<String>>();// 保存同级节点
//private Map<String, List<String>> m4 = new HashMap<String, List<String>>();//保存祖先节点
/**
* 添加节点
*
* @param parentNode
* @param childNode
*/
public void add(String parentNode, String childNode) {
m1.put(childNode, parentNode);
// 添加子节点到m2
List<String> child = m2.get(parentNode);
if (child == null) {
child = new ArrayList<String>();
m2.put(parentNode, child);
}
child.add(childNode);
// 添加子节点到m3
List<String> peer = m3.get(childNode);
if (peer == null) {
peer = new ArrayList<String>();
m3.put(childNode, child);
}
peer.add(parentNode);
}
/**
* 获取父节点
*
* @param node
* @return
*/
public String getParentNode(String node) {
return m1.get(node);
}
/**
* 获取子节点
*
* @param node
* @return子节点集合
*/
public List<String> getChildNode(String node) {
return m2.get(node);
}
/**
* 获取同级节点
*
* @param node
* @return同级节点
*/
public List<String> getPeerNode(String node) {
return m3.get(node);
}
// /**
// * 获取祖先节点
// *
// * @param node
// * @return祖先节点
// */
// public List<String> getAncestorNode(String node) {
// return null;
// }
}
package com.lyq;
import java.util.List;
public class Test {
public static void main(String[] args) {
//Tree:
//获取当前节点的父节点
//获取当前节点的子节点
//获取当前节点的同级节点
//获取当前节点的祖先节点
//获取当前节点的子孙节点
Tree t = new Tree();
t.add(null,"祖父");
t.add("祖父","伯父");
t.add("祖父","父亲");
t.add("祖父","叔叔");
t.add("伯父","堂兄");
t.add("父亲","兄");
t.add("父亲","我");
t.add("父亲","弟");
t.add("叔叔","堂弟");
t.add("我","儿子");
t.add("我","孙子");
t.add("我","儿子");
t.add("我","孙子");
System.out.println(t.getParentNode("堂兄"));
System.out.println();
List<String> childNode = t.getChildNode("父亲");
for (String string : childNode) {
System.out.println(string);
}
System.out.println();
List<String> peerNode = t.getPeerNode("父亲");
for (String string : peerNode) {
System.out.println(string);
}
// System.out.print("\nM的祖先节点为");
// List<String> ancestorNode = t.getAncestorNode("M");
// for (String string : ancestorNode) {
// System.out.print(string);
// }1
}
}
------解决方案--------------------
楼主的节点的数据结构设计过于冗余,在你的基础上帮你写出来了
import java.util.List;
public class Test {
public static void main(String[] args) {
// Tree:
// 获取当前节点的父节点
// 获取当前节点的子节点
// 获取当前节点的同级节点
// 获取当前节点的祖先节点
// 获取当前节点的子孙节点
Tree t = new Tree();
t.add(null, "祖父");
t.add("祖父", "伯父");
t.add("祖父", "父亲");
t.add("祖父", "叔叔");
t.add("伯父", "堂兄");
t.add("父亲", "兄");
t.add("父亲", "我");
t.add("父亲", "弟");
t.add("叔叔", "堂弟");
t.add("我", "儿子");
t.add("儿子", "孙子");//错误
t.add("我", "女儿");
t.add("女儿", "孙女");
System.out.println(t.getParentNode("堂兄"));
System.out.println();
List<String> childNode = t.getChildNode("父亲");
for (String string : childNode) {
System.out.println(string);
}
System.out.println();
List<String> peerNode = t.getPeerNode("父亲");
for (String string : peerNode) {
System.out.println(string);
}
// System.out.print("\nM的祖先节点为");
// List<String> ancestorNode = t.getAncestorNode("M");