永发信息网

用Java创建一棵树

答案:2  悬赏:10  手机版
解决时间 2021-01-11 06:52
用Java创建一棵树
最佳答案
class Node{
private String id;

private String title;

private Node parent;

private Collection children;

//get set方法

}

当你在 使用类似setParent addChild 等方法时,切记注意 children和parent这2个对象的一致
全部回答
一个是树的节点,一个是树,这个是我以前编写的宽度优先遍历的树的构建和遍历,希望对你有帮助。文件名是:Tree.java
import java.util.ArrayList;
// 树的一个节点
class TreeNode {
Object _value = null; // 他的值
TreeNode _parent = null; // 他的父节点,根节点没有PARENT
ArrayList _childList = new ArrayList(); // 他的孩子节点
public TreeNode( Object value, TreeNode parent ){
this._parent = parent;
this._value = value;
}
public TreeNode getParent(){
return _parent;
}
public String toString() {
return _value.toString();
}
}
public class Tree {
// 给出宽度优先遍历的值数组,构建出一棵多叉树
// null 值表示一个层次的结束
// "|" 表示一个层次中一个父亲节点的孩子输入结束
// 如:给定下面的值数组:
// { "root", null, "left", "right", null }
// 则构建出一个根节点,带有两个孩子("left","right")的树
public Tree( Object[] values ){
// 创建根
_root = new TreeNode( values[0], null );
// 创建下面的子节点
TreeNode currentParent = _root; // 用于待创建节点的父亲
//TreeNode nextParent = null;
int currentChildIndex = 0; // 表示 currentParent 是他的父亲的第几个儿子
//TreeNode lastNode = null; // 最后一个创建出来的TreeNode,用于找到他的父亲
for ( int i = 2; i < values.length; i++ ){
// 如果null ,表示下一个节点的父亲是当前节点的父亲的第一个孩子节点
if ( values[i] == null ){
currentParent = (TreeNode)currentParent._childList.get(0);
currentChildIndex = 0;
continue;
}
// 表示一个父节点的所有子类输入完毕
if ( values[i].equals("|") ){
if ( currentChildIndex+1 < currentParent._childList.size() ){
currentChildIndex++;
currentParent = (TreeNode)currentParent._parent._childList.get(currentChildIndex);
}
continue;
}
TreeNode child = createChildNode( currentParent, values[i] );
}
}
TreeNode _root = null;
public TreeNode getRoot(){
return _root;
}

// 将给定的值做为 parent 的孩子,构建节点
private TreeNode createChildNode( TreeNode parent, Object value ){
TreeNode child = new TreeNode( value , parent );
parent._childList.add( child );
return child;
}
public static void main(String[] args) {
Tree tree = new Tree( new Object[]{ "root", null,
"left", "right", null,
"l1","l2","l3", "|", "r1","r2",null } );
//tree.printSteps();
System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(0) )._childList.get(0) );
System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(0) )._childList.get(1) );
System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(0) )._childList.get(2) );
System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(1) )._childList.get(0) );
System.out.println(""+ ( (TreeNode)tree.getRoot()._childList.get(1) )._childList.get(1) );
}
}追问请不要在百度上找一些东西然后复制给我
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
作文:学会敬礼(不少于200个字)
sm和灌肠是什么
大家想几个梦幻一点的女孩名字,两个字的
单选题二战后,国际货币金融体系建立,作为国
含有食堂两字的店名,大家帮忙想想,谢谢。
烟台大宇造船厂怎么样?
630里面有几个九十630是九十的几倍
很烦躁啊
有一首歌开始是在很久很久以前dj歌是什么
泉州北峰中学地址好找么,我有些事要过去,
简单制作小飞机 用筷子
123456789×( )=333333333
怎么把程序传送到PLC,显示所选的端口不存在
K251次列车几点到义乌
请问有谁知道国旗护卫队 刘岩 高红莆 苏伟 的
推荐资讯
重庆好食寨火锅六盘水店我想知道这个在什么地
为什么网络诈骗无人管理
台风是怎样形成的?能消灭它吗?
我想在嘉善为我孩子找一个学钢笔字的老师?
虎头茉莉几年苗好养
1976年阴历四月二十日出生的是什么星座?
济南烧烤技术培训哪家好
一加6与iphone哪个流畅
在excel里怎么把2012-1-1变成2012-01-01
sdn super控制器 华为 是什么意思
问:共电不共地什么意思
yii2.0 中的子查询怎么写
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?