您的位置:

java树,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如何创建一颗二叉树

计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(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中如何建立一个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是一个带滚动条的面板类。

将对象加入到带滚动条的面板类中,在将已建的数放入到其中。

就可建立一个系统默认的树结构。

java实现tree树性能如何

树与二叉树实现差不多,二叉树类变量里面有两个节点,通过配置一些参数让数据库性能达到最优。

用Java实现的数据树形封装。

树在java中的应用有哪些

首先:树与线性表、栈、队列等线性结构不同,树是一种非线性结构。一棵树只有一个根节点,如果一棵树有了多个根节点,那它已经不再是一棵树了,而是多棵树的集合,也被称为森林。

其次:java中树的应用主要有:菜单树,还有权限树,商品分类列表也是树结构。

Java递归树形结构详解

2023-05-17
java树,java树形结构递归实现

2022-11-27
java递归树状json,java递归组织结构树

2022-11-24
java树形结构,java树形结构递归实现

2022-11-29
java树形结构,java树形结构查询

2023-01-07
java递归树,java递归树形结构根据父级和字段是否有子级

2022-11-29
java树形结构json(java树形结构扁平化实例)

本文目录一览: 1、java 递归数据库生成 树形结构问题 2、java实现树形结构,可以把String[] a = {"1", "1-3-4", "1-2", "1-2"}这个数组,转变成如图的树j

2023-12-08
java绘图算法树形图递归分形(分形树 递归流程)

2022-11-15
java递归菜单树,递归调用树

2022-11-25
java树结构,java树结构递归

2022-11-30
java实现遍历树形菜单方法,java 树形菜单

2022-11-20
Java 树形结构

2023-05-18
Java树形结构查询用法

在Java中,树形结构查询主要是通过特定的数据结构和相关算法,来实现对特定的树形结构数据的查询操作,从而获取树中的某个或者某些节点的信息。一、常用的树形数据结构在Java中,常用的树形结构包括二叉树、

2023-12-08
Java树形结构查询用法

在Java中,树形结构查询主要是通过特定的数据结构和相关算法,来实现对特定的树形结构数据的查询操作,从而获取树中的某个或者某些节点的信息。一、常用的树形数据结构在Java中,常用的树形结构包括二叉树、

2023-12-08
java树,java树结构

2023-01-08
java实现avl树的重构,java 树 数据结构

2022-11-22
包含java部门递归树的词条

2022-11-22
php递归函数树状列表,php树形结构

2022-11-28
java菜单树,java菜单树并记录菜单深度

2023-01-09
Java树形结构的解释和用法

Java树形结构是一种可以存储元素的有层级关系的数据结构,每个元素以节点的形式存在,并且一个根节点会关联多个子节点,子节点再关联更多的子节点,以此类推。一、树的基本概念1、树形结构是一种递归式数据结构

2023-12-08