本文目录一览:
java 构建二叉树
首先我想问为什么要用LinkedList 来建立二叉树呢? LinkedList 是线性表,
树是树形的, 似乎不太合适。
其实也可以用数组完成,而且效率更高.
关键是我觉得你这个输入本身就是一个二叉树啊,
String input = "ABCDE F G";
节点编号从0到8. 层次遍历的话:
对于节点i.
leftChild = input.charAt(2*i+1); //做子树
rightChild = input.charAt(2*i+2);//右子树
如果你要将带有节点信息的树存到LinkedList里面, 先建立一个节点类:
class Node{
public char cValue;
public Node leftChild;
public Node rightChild;
public Node(v){
this.cValue = v;
}
}
然后遍历input,建立各个节点对象.
LinkedList tree = new LinkedList();
for(int i=0;i input.length;i++)
LinkedList.add(new Node(input.charAt(i)));
然后为各个节点设置左右子树:
for(int i=0;iinput.length;i++){
((Node)tree.get(i)).leftChild = (Node)tree.get(2*i+1);
((Node)tree.get(i)).rightChild = (Node)tree.get(2*i+2);
}
这样LinkedList 就存储了整个二叉树. 而第0个元素就是树根,思路大体是这样吧。
树在java中的应用有哪些
首先:树与线性表、栈、队列等线性结构不同,树是一种非线性结构。一棵树只有一个根节点,如果一棵树有了多个根节点,那它已经不再是一棵树了,而是多棵树的集合,也被称为森林。
其次:java中树的应用主要有:菜单树,还有权限树,商品分类列表也是树结构。
java如何创建一颗二叉树
计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left
subtree)和“右子树”(right
subtree)。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2的
i
-1次方个结点;深度为k的二叉树至多有2^(k)
-1个结点;对任何一棵二叉树T,如果其终端结点数(即叶子结点数)为n0,度为2的结点数为n2,则n0
=
n2
+
1。
树是由一个或多个结点组成的有限集合,其中:
⒈必有一个特定的称为根(ROOT)的结点;
二叉树
⒉剩下的结点被分成n=0个互不相交的集合T1、T2、......Tn,而且,
这些集合的每一个又都是树。树T1、T2、......Tn被称作根的子树(Subtree)。
树的递归定义如下:(1)至少有一个结点(称为根)(2)其它是互不相交的子树
1.树的度——也即是宽度,简单地说,就是结点的分支数。以组成该树各结点中最大的度作为该树的度,如上图的树,其度为2;树中度为零的结点称为叶结点或终端结点。树中度不为零的结点称为分枝结点或非终端结点。除根结点外的分枝结点统称为内部结点。
2.树的深度——组成该树各结点的最大层次。
3.森林——指若干棵互不相交的树的集合,如上图,去掉根结点A,其原来的二棵子树T1、T2、T3的集合{T1,T2,T3}就为森林;
4.有序树——指树中同层结点从左到右有次序排列,它们之间的次序不能互换,这样的树称为有序树,否则称为无序树。
树的表示
树的表示方法有许多,常用的方法是用括号:先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中,而对子树也采用同样的方法处理;同层子树与它的根结点用圆括号括起来,同层子树之间用逗号隔开,最后用闭括号括起来。如右图可写成如下形式:
二叉树
(a(
b(d,e),
c(
f(
,g(h,i)
),
)))
java对象树是什么东东?
对象树就是说他的根父类是Object然后Object的子类有lung等等。。然后还有更多的子类。这就是指java对象树
JAVA画树
画什么都行,这个你得自己实现。我可以给你写一个画树的小程序:
---------------------------------------------------------
//TreeNode.java
package util;
import java.util.Vector;
public class TreeNode {
private VectorTreeNode children;
private TreeNode parent;
private TreeNode root;
public TreeNode (TreeNode parent) {
children = new VectorTreeNode();
if (parent == null)
root = this;
else {
parent.addChild(this);
}
}
public void addChild (TreeNode n) {
addChild(children.size(), n);
}
public void addChild (int index, TreeNode n) {
children.add(index, n);
n.parent = this;
}
public void removeChild (TreeNode n) {
children.remove(n);
}
public void removeChild (int index) {
children.remove(index);
}
public void setChild (int index, TreeNode n) {
children.set(index, n);
n.parent = this;
}
public TreeNode getChild (int index) {
return children.get(index);
}
public void changePosition (int index1, int index2) {
if (0 = index1 index1 children.size()
0 = index2 index2 = children.size()) {
TreeNode tmp = children.get(index1);
children.set(index1, children.get(index2));
children.set(index2, tmp);
}
}
public void setParent (TreeNode n) {
parent = n;
}
public TreeNode getRoot () {
return root;
}
public TreeNode getParent () {
return parent;
}
public VectorTreeNode getChildren () {
return children;
}
}
------------------------------------------------------------
//TreePanelNode.java
package ui;
import util.TreeNode;
import java.awt.*;
public class TreePanelNode extends TreeNode {
private int x, y, width, height;
private Object value;
private TreePanelNode parent;
public TreePanelNode (TreePanelNode parent, int x, int y, int width, int height, Object value) {
super(parent);
this.x = x;
this.y = y;
this.parent = parent;
this.width = width;
this.height = height;
this.value = value;
}
public void setLocation (int x, int y) {
this.x = x;
this.y = y;
}
public void setSize (int width, int height) {
this.width = width;
this.height = height;
}
public Rectangle getBounds () {
return new Rectangle(x, y, width, height);
}
public Object getValue () {
return value;
}
public Point getLocation () {
return new Point(x, y);
}
public int getWidth () {
return width;
}
public int getHeight () {
return height;
}
public void setValue (Object value) {
this.value = value;
}
public TreePanelNode getParent () {
return parent;
}
}
--------------------------------------------------------------
//TreePanel.java
package ui;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
public class TreePanel extends JPanel {
private VectorTreePanelNode nodes;
private VectorInteger selectedNodes;
private int tmpX, tmpY;
private int editingNode = -1;
private int addingParent = -2;
private int mouseX, mouseY;
public TreePanel () {
nodes = new VectorTreePanelNode();
selectedNodes = new VectorInteger();
setBackground(Color.WHITE);
addMouseListener(new MouseAdapter() {
public void mousePressed (MouseEvent me) {
tmpX = me.getX();
tmpY = me.getY();
if (nodes.size() == 0) {
addingParent = -1;
}
int i = 0;
for (; inodes.size(); i++) {
if (nodes.get(i).getBounds().contains(mouseX, mouseY)) {
if (me.isControlDown()) {
if (!selectedNodes.contains(i))
selectedNodes.add(i);
else
selectedNodes.removeElement(i);
} else if (!selectedNodes.contains(i)) {
selectedNodes = new VectorInteger();
selectedNodes.add(i);
}
if (me.getClickCount() == 2) {
nodes.get(i).setValue("");
editingNode = i;
}
break;
}
}
if (i == nodes.size())
if (!me.isControlDown())
selectedNodes = new VectorInteger();
repaint();
}
public void mouseReleased (MouseEvent me) {
addingParent = -2;
}
});
addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged (MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
int i = 0;
for (; iselectedNodes.size(); i++) {
if (nodes.get(selectedNodes.get(i)).getBounds().contains(mouseX, mouseY))
break;
}
if (i != selectedNodes.size()) {
if (me.isAltDown() addingParent != -3) {
addingParent = selectedNodes.get(i);
} else {
for (i=0; iselectedNodes.size(); i++) {
nodes.get(selectedNodes.get(i)).setLocation(nodes.get(selectedNodes.get(i)).getLocation().x + mouseX - tmpX,
nodes.get(selectedNodes.get(i)).getLocation().y + mouseY - tmpY);
}
tmpX = mouseX;
tmpY = mouseY;
}
}
repaint();
}
public void mouseMoved (MouseEvent me) {
mouseX = me.getX();
mouseY = me.getY();
}
});
addKeyListener(new KeyAdapter() {
public void keyTyped (KeyEvent ke) {
if (editingNode != -1) {
if (ke.getKeyCode() == KeyEvent.VK_ENTER)
editingNode = -1;
else
nodes.get(editingNode).setValue(nodes.get(editingNode).getValue().toString()+ke.getKeyChar());
repaint();
}
}
});
}
public void paint (Graphics g) {
super.paint(g);
FontMetrics fm = g.getFontMetrics();
if (addingParent -2) {
String str = "node" + nodes.size();
int width = fm.stringWidth(str);
int height = fm.getHeight();
TreePanelNode pnt = null;
if (addingParent != -1)
pnt = nodes.get(addingParent);
nodes.add(new TreePanelNode(pnt, mouseX-width/2-10, mouseY-height/2-20, width+20, height+40, str));
addingParent = -3;
selectedNodes = new VectorInteger();
selectedNodes.add(nodes.size()-1);
}
for (int i=0; inodes.size(); i++) {
String str = nodes.get(i).getValue().toString();
int width = fm.stringWidth(str);
int height = fm.getHeight();
nodes.get(i).setSize(width + 20, height + 40);
if (selectedNodes.contains(i))
g.setColor(Color.RED);
else
g.setColor(Color.BLACK);
if (nodes.get(i).getParent() != null)
g.drawLine(nodes.get(i).getLocation().x+nodes.get(i).getWidth()/2,
nodes.get(i).getLocation().y+nodes.get(i).getHeight()/2,
nodes.get(i).getParent().getLocation().x+nodes.get(i).getParent().getWidth()/2,
nodes.get(i).getParent().getLocation().y+nodes.get(i).getParent().getHeight()/2);
g.drawString(str, nodes.get(i).getLocation().x + 10, nodes.get(i).getLocation().y + 20);
g.drawRect(nodes.get(i).getLocation().x, nodes.get(i).getLocation().y, nodes.get(i).getWidth(), nodes.get(i).getHeight());
}
grabFocus();
}
}
----------------------------------------------------------
//MainView.java
package ui;
import javax.swing.*;
public class MainView extends JFrame {
private TreePanel tp;
public MainView () {
super("TreeDemo");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLocationRelativeTo(null);
tp = new TreePanel();
add(tp);
setVisible(true);
}
public static void main (String args[]) {
new MainView();
}
}
------------------------------------------------------------
好了。然后你新建一个 util 文件夹 和 一个 ui 文件夹,把第一个文件放在 util 文件夹下,把其余文件放在 ui 文件夹下,文件名都根据我的注释就行了。
例如你这两个文件夹新建在 D 盘下,在命令行中编译运行:
----------------------------------------------------------
...D:
D:\javac util\TreeNode.java ui\TreePanelNode.java ui\TreePanel.java ui\MainView.java
D:\java ui.MainView
----------------------------------------------------------
于是便能看到效果。祝您好运,顺便我写了这么多就给个最佳答案吧,哈哈。
忘了告诉你,按住 Alt 键拖动 Node 可以添加子节点。
按住 Ctrl 键单击 node 可以多选。
双击一个 node 然后可以从键盘输入 新的字符串,按回车结束。
----------------------------------------------------------
如果对以上的程序还有什么问题,留下邮箱,我直接发给你。
java中如何建立一个java树,请详解?
import java.awt.*;
import javax.swing.*;
class TreeDemo extends JFrame
{
public TreeDemo()
{
setSize(400,300);
setTitle("演示怎样使用JTree");
show();
JScrollPane jPanel=new JScrollPane();
getContentPane().add(jPanel);
JTree jtree=new JTree();
jPanel.getViewport().add(jtree,null);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class Example5_25
{
public static void main(String[] args)
{
TreeDemo frame=new TreeDemo();
}
}
其中JScrollPane是一个带滚动条的面板类。
将对象加入到带滚动条的面板类中,在将已建的数放入到其中。
就可建立一个系统默认的树结构。