当前位置: 代码迷 >> J2SE >> 关于Tree会合(自己写代码实现)
  详细解决方案

关于Tree会合(自己写代码实现)

热度:65   发布时间:2016-04-23 20:43:09.0
关于Tree集合(自己写代码实现)
要求自己写一个集合,集合名为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");
  相关解决方案