我是靠谱客的博主 帅气大象,最近开发中收集的这篇文章主要介绍多叉树的实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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,节点名称)生成多叉树,并进行遍历。

 

转载于:https://www.cnblogs.com/wanghui390/p/6920505.html

最后

以上就是帅气大象为你收集整理的多叉树的实现的全部内容,希望文章能够帮你解决多叉树的实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部