import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
*
* <多叉樹>
* <功能詳細描述>
*
* @author soul390
* @version
*/
public class TreeNode
{
/**
* 父節點的ID
*/
private int parentId;
private int selfId;
protected String nodeName;
protected Object object;
protected TreeNode parentNode;
/**
* 孩子節點列表
*/
protected List<TreeNode> childList;
public String getNodeName()
{
return nodeName;
}
public void setNodeName(String nodeName)
{
this.nodeName = nodeName;
}
public List<TreeNode> getChildList()
{
return childList;
}
public void setChildList(List<TreeNode> childList)
{
this.childList = childList;
}
public int getParentId()
{
return parentId;
}
public void setParentId(int parentId)
{
this.parentId = parentId;
}
public int getSelfId()
{
return selfId;
}
public void setSelfId(int selfId)
{
this.selfId = selfId;
}
public TreeNode(int parentId, int selfId, String nodeName)
{
this.parentId = parentId;
this.selfId = selfId;
this.nodeName = nodeName;
}
public void initChildList()
{
if(null == childList)
{
childList = new ArrayList<>();
}
}
public void addChildNode(TreeNode treeNode)
{
initChildList();
childList.add(treeNode);
}
/**
* <插入節點>
* <功能詳細描述>
* @param treeNode
* @return
* @author soul390
*/
public boolean insertJuniorNode(TreeNode treeNode)
{
int parentId = treeNode.getParentId();
if(this.selfId == parentId)
{
addChildNode(treeNode);
return true;
}
else
{
if(childList == null || childList.isEmpty())
{
return false;
}
for(TreeNode node:childList)
{
boolean f = node.insertJuniorNode(treeNode);
if(f)
{
return true;
}
}
}
return false;
}
/**
* <深度優先遍歷>
* <功能詳細描述>
* @author soul390
*/
public void depthTraverse()
{
System.out.println(nodeName);
if(null == childList || childList.isEmpty())
{
return;
}
for(TreeNode node:childList)
{
node.depthTraverse();
}
}
/**
* <廣度優先遍歷>
* <功能詳細描述>
* @author soul390
*/
public void breadthTraverse()
{
// 使用隊列暫存節點
LinkedList<TreeNode> linkedList = new LinkedList<>();
linkedList.add(this);
while(!linkedList.isEmpty())
{
TreeNode node = linkedList.pop();
System.out.println(node.getNodeName());
if(node.getChildList() == null || node.getChildList().isEmpty())
{
continue;
}
for(TreeNode treeNode:node.getChildList())
{
linkedList.add(treeNode);
}
}
}
}
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
public class TreeHelper
{
private TreeNode root;
public TreeNode getRoot()
{
return root;
}
public void setRoot(TreeNode root)
{
this.root = root;
}
private List<TreeNode> treeNodeList;
public TreeHelper(List<TreeNode> treeNodeList)
{
this.treeNodeList = treeNodeList;
generateTree();
}
/**
*
* <生成樹>
* <功能詳細描述>
* @author soul390
*/
private void generateTree()
{
HashMap<Integer, TreeNode> nodeMap = putNodesIntoMap();
putChildIntoParent(nodeMap);
}
/**
*
* <根據節點的selfId,生成HashMap>
* <功能詳細描述>
* @return
* @author soul390
*/
protected HashMap<Integer, TreeNode> putNodesIntoMap()
{
int maxId = Integer.MAX_VALUE;
HashMap<Integer, TreeNode> hashMap = new HashMap<>();
for(TreeNode node:treeNodeList)
{
int selfId = node.getSelfId();
if(selfId < maxId)
{
// 根節點
root = node;
maxId = selfId;
}
hashMap.put(selfId, node);
}
return hashMap;
}
/**
*
* <建立節點之間的聯系>
* <功能詳細描述>
* @param nodeMap
* @author soul390
*/
public void putChildIntoParent(HashMap<Integer, TreeNode> nodeMap)
{
Iterator<TreeNode> iterator = nodeMap.values().iterator();
while (iterator.hasNext())
{
TreeNode node = iterator.next();
int parentId = node.getParentId();
if(nodeMap.containsKey(parentId))
{
// 找到父節點,並加入父節點的子節點列表
TreeNode parentNode = nodeMap.get(parentId);
parentNode.addChildNode(node);
}
}
}
}
import java.util.ArrayList;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
TreeNode node1 = new TreeNode(0, 2, "A");
TreeNode node2 = new TreeNode(2, 3, "B");
TreeNode node3 = new TreeNode(2, 4, "C");
TreeNode node4 = new TreeNode(3, 5, "D");
TreeNode node5 = new TreeNode(3, 6, "E");
TreeNode node6 = new TreeNode(2, 7, "F");
TreeNode node7 = new TreeNode(6, 8, "G");
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(node1);
list.add(node2);
list.add(node3);
list.add(node4);
list.add(node5);
TreeHelper helper = new TreeHelper(list);
helper.getRoot().insertJuniorNode(node6);
helper.getRoot().insertJuniorNode(node7);
// 深度優先遍歷
helper.getRoot().breadthTraverse();
System.out.println("-------------------");
// 廣度優先遍歷
helper.getRoot().depthTraverse();
}
}
根據節點信息(父節點的ID,節點ID,節點名稱)生成多叉樹,並進行遍歷。

