
终止搞定,inorder和postorder分别是中序和后序
public class Test
{
static String inorder = "287413695";//"BDEFACHG"; //已知中序
static String postorder = "874296531";//"FEDBHGCA"; //已知后序
static Node root;
static class Node
{
public Node(char divideChar)
{
thisdata = divideChar;
}
Node left;
Node right;
char data;
}
static Node divide(String in,String post,Node node)
{
if (in == null || inlength() < 1 || post == null || postlength() < 1)
return null;
String left = "";
char divideChar = postcharAt(postlength()-1);
if(inindexOf(divideChar) != -1)
left = insubstring(0, inindexOf(divideChar));
String right = insubstring(inindexOf(divideChar) + 1);
if(node == null)
root = node = new Node(divideChar);
else
node = new Node(divideChar);
if (left != null)
{
if(leftlength() > 1)
nodeleft = divide(left, postsubstring(0,leftlength()),node);
else if(leftlength() == 1)
nodeleft = new Node(leftcharAt(0));
}
if (right != null)
{
if(rightlength() > 1)
noderight = divide(right, postsubstring(leftlength(),postlength()-1),node);
else if(rightlength() == 1)
noderight = new Node(rightcharAt(0));
}
return node;
}
static void preorder(Node node)
{
if(node == null) return;
Systemoutprintln(nodedata);
if(nodeleft != null) preorder(nodeleft);
if(noderight != null) preorder(noderight);
}
public static void main(String[] args)
{
root = divide(inorder, postorder,root);
preorder(root); //打印前序
}
}
这个要看你是怎么实现的TreeModel,无非三种方式:
1 自己实现TreeModel,这样的话,节点对象就可以直接使用File对象。获取路径也就不成问题了。
2 自己实现treeNode接口,这样的话,可以在treeNode接口中增加File对象的引用。
3 用defaultMutableTreeNode来实现的,那么,可以使用setUserObject的方法,将File对象设置在TreeNode中,然后就可以在得到节点后,使用getUserObject来获取了。
大致如此吧,估计你用的是第3种,因为很少有人愿意重写TreeCellRenderer的,呵呵。但最佳的办法其实就是第一种。
这样的用简单的判断就行了 :先判断PID为空的,这个是父节点,然后取出PID为空的Id当做取其子节点的父节点,一次判断就行了,结合列子:取PID为空的ID即1,2,然后把取PId等于1和2的ID即345和6然后分别挂在1和2下,345就是1的子节点,6是2的子节点,有多节点的一次类推(这只是其中一个简单的方法)
实现过程中需要调用Javac的API接口获取抽象语法树。
获得抽象语法树的过程为:代码,词法分析,语法分析,AST词法分析。把字符串形式的代码转换为令牌流。
拿到了抽象语法树,等于拿到了整份的代码,我们可以对所有的代码进行扫描,可以在特定的代码中写入一些逻辑。
这是代码,你可以自己调试一下。
数据结构如下:
CREATE TABLE dtree (
id int,
pid int,
name varchar(200),
url varchar(200),
title varchar(200),
target varchar(200),
icon varchar(200),
iconopen varchar(200),
opened bit);
为了实现获取数据库变量功能,需要建立一个DTree类,并编译生成CLASS文件,放入\WEB-INF\classes文件夹下。
DTree类代码如下:
package work3;
public class DTree {
private int id;
private int pid;
private String name;
private String url;
private String title;
private String target;
private String icon;
private String iconOpen;
private int opened;
public int getId() {
return id;
}
public void setId(int id) {
thisid = id;
}
public int getPid() {
return pid;
}
public void setPid(int pid) {
thispid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
thisname = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
thisurl = url;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
thistitle = title;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
thistarget = target;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
thisicon = icon;
}
public String getIconOpen() {
return iconOpen;
}
public void setIconOpen(String iconOpen) {
thisiconOpen = iconOpen;
}
public int getOpened() {
return opened;
}
public void setOpened(int opened) {
thisopened = opened;
}
}
work3jsp代码如下:
<%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
<%@ page import="javasql"%>
<jsp:useBean id='settree' scope="application" class="work3DTree" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 401 Transitional//EN"
">
设计树: 自己定制 TreeModel (写一个类实现 TreeModel 接口,可以参考或者继承 DefaultTreeModel
获取到李四: 是说当用户选中李四的时候获取到这个“选中了李四的事件”么?
jtreegetSelectionModel()addTreeSelectionListener(TreeSelectionListener)
自己写一个类实现 TreeSelectionListener
以上就是关于怎么用Java语言来实现二叉树啊我现在编了一个程序却不能运行出结果,谁能帮我!全部的内容,包括:怎么用Java语言来实现二叉树啊我现在编了一个程序却不能运行出结果,谁能帮我!、Java资源管理器中树形文件目录的路径取得问题、java代码怎样查出树形结构的某个节点的所有子孙节点要算法实现!!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)