扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
mport java.awt.BorderLayout;
网站建设哪家好,找成都创新互联!专注于网页设计、网站建设、微信开发、小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了施甸免费建站欢迎大家使用!
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
public class Randomtree extends JFrame {
private JTree tree;
public static String[] school = { "初中课程", "高中课程", "大学课程" };
public static String[] color = { "颜色", "运动", "食物" };
public static String[] plant = { "植物", "动物", "人" };
public static String[][] school2= {
{ "初中一年级", "初中二年级", "初中三年级"}, {"高中一年级", "高中二年级",
"高中三年级"}, {"大学一年级", "大学二年级", "大学三年级", "大学四年级"} };
public static String[][] color2 = {
{ "绿色", "白色", "红色"}, {"足球", "篮球",
"羽毛球"}, {"面包", "牛奶", "披萨", "热狗"} };
public static String[][] plant2 = {
{ "玫瑰花", "月季花", "海棠花"}, {"猪", "狗",
"猫"}, {"黄种人", "黑种人", "白种人", } };
public static void main(String[] args) {
// TODO 自动生成方法存根
new Randomtree();
}
public Randomtree() {
super();
final Random random=new Random();
setVisible(true);
setSize(300,400);
tree = new JTree();
final JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(0, 40));
getContentPane().add(panel, BorderLayout.NORTH);
final JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(300, 350));
getContentPane().add(scrollPane, BorderLayout.CENTER);
final JButton button = new JButton();
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
int k=random.nextInt(3);
tree=getTree(k);
scrollPane.setViewportView(tree);
}
});
scrollPane.setViewportView(null);
button.setText("随机生成树");
panel.add(button);
pack();
}
protected JTree getTree(int n) {
String[] second=null;
String[][] three=null;
if(n==0){second=school; three=school2;}
if(n==1){second=color; three=color2;}
if(n==2){second=plant; three=plant2;}
DefaultMutableTreeNode root=new DefaultMutableTreeNode("root");
for(int i=0;isecond.length;i++){
DefaultMutableTreeNode secondNode=new DefaultMutableTreeNode(second[i]);
for (int j=0;jthree[i].length;j++){
DefaultMutableTreeNode threetNode=new DefaultMutableTreeNode(three[i][j]);
secondNode.add(threetNode);
}
root.add(secondNode);
}
JTree tree=new JTree(root);
tree.expandRow(1);
tree.expandRow(5);
tree.expandRow(9);
return tree;
}
}
简单的 例子你可以模仿一下
很难吗?树结构哦。看你数据结构学的怎么样呗。呵呵,我先想到的数据结构是双亲孩子表示法,当然查找关系的时候就要进行一些条件设置,比如祖孙的关系数大于父子的关系数2,兄弟拥有相同的双亲,堂兄弟的双亲是兄弟,回溯到相同的祖先结点则有共同的祖先咯。
每一个节点有一个成员变量引用下一个节点就行了。
大致实现了一下单向链表 没有加入异常也没有仔细考虑实现的代码的效率,可以参考下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
public class LinkListTest {
public static void main(String[] args) {
LinkListString ll=new LinkListString();
ll.add("a");
ll.add("b");
ll.add("c");
ll.add("d");
ll.remove(1);
System.out.println(ll.get(0));
System.out.println(ll.get(1));
System.out.println(ll.get(2));
System.out.println(ll.get(3));
System.out.println(ll.size());
}
}
class LinkListT{
private NodeT frist=null;
private NodeT last=null;
private int size=0;
public void add(T t){
if(frist==null){
NodeT node=new NodeT();
node.setT(t);
size++;
frist=node;
last=node;
}else{
NodeT node=new NodeT();
node.setT(t);
last.setNextNode(node);
size++;
last=node;
}
}
public T get(int i){
if(i=0isize){
NodeT nod=null;
for(int n=0;n=i;n++){
if(n==0)
nod=frist;
else
nod=nod.getNextNode();
if(i==n){
return nod.getT();
}
}
}
return null;
}
public void remove(int i){
if(i=0isize){
if(size2){
frist=null;
last=null;
size=0;
}else{
size--;
if(i==0){
frist=frist.getNextNode();
}else{
NodeT nod1=null;
NodeT nod2=null;
for(int n=0;n=i;n++){
if(n==0){
nod1=frist;
nod2=frist;
}else{
nod2=nod1;
nod1=nod1.getNextNode();
}
if(i==n){
if(nod1!=null)
nod2.setNextNode(nod1.getNextNode());
else{
nod2.setNextNode(null);
last=nod2;
}
}
}
}
}
}
}
public int size(){
return size;
}
}
class Node T{
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public NodeT getNextNode() {
return nextNode;
}
public void setNextNode(NodeT nextNode) {
this.nextNode = nextNode;
}
private T t;
private NodeT nextNode=null;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流