java樹形
A. java中有沒有現成的樹形結構的類
樹時用來存儲東西的,如果非要說類似的類,那麼應該是treemap和treeset應該是使用的avl平衡二叉樹實現的。其他的,好像暫時沒有發現。正常演算法使用的樹,都是用的node裡面存放引用來實現的。
B. java 實現json樹形顯示
C. java怎麼設置樹狀列表使得其默認為展開
樹狀列表一般都是動態生成的(java後台實現),所以java只負責發送這些html代碼,而頁面控制就要交給前端的js來控制
所以要設置列表默認展開,只要把該區域的div設置為非隱藏即可
也可以使用js的一些類庫來實現樹狀列表
D. java怎麼對樹形結構進行遍歷
java">import java.util.Iterator;
import java.util.Random;
import java.util.TreeSet;
public class Demo{
public static void main(String[] args) throws Exception {
TreeSet<Integer> ts = new TreeSet<Integer>();
for(int i = 0; i < 10; i++){
ts.add(new Random().nextInt(999));
}
for(Iterator<Integer> it = ts.iterator(); it.hasNext();){
System.out.println(it.next());
}
}
}
E. java從資料庫中查詢數據,存儲為樹形結構,怎麼做
以前用dtree寫過一個,先把你資料庫數據查出來,重點是確定父id跟子id都已經分好了,然後剩下的主要是在jsp里寫樹菜單就好了:給你參考下,下面那兩個文件你可能沒有,不過應該可以在網上下載的
<div class="dtree">
<p><a href="javascript: d.openAll();">展開</a> | <a href="javascript: d.closeAll();">關閉</a></p>
<script type="text/javascript">
d = new dTree('d',"${contextPath}/js/dtree/");
d.add(0,-1,'涉及問題選擇');
<c:forEach items="${problemList}" var="pro">
var fid;
var config="${pro.content}";
fid = '${pro.fid}';
var id = '${pro.id}';
if(${pro.son}==0){
ss='+config,'${pro.content}','frame_right');
d.add('${pro.id}',fid,config,'${contextPath}/ajdj/ajdj_sjwtLj.do?config.id='+id,'${pro.content}','frame_right');
}else{
d.add('${pro.id}',fid,config,'','${pro.content}','frame_right');
}
</c:forEach>
document.write(d);
</script>
</div>
F. Java遞歸如何正確輸出樹形菜單
首先我們要建立樹節點的類:
[java] view plain
package com.tree;
public class Node {
private Integer id;
private Integer parentId;
private String name;
private String link;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getParentId() {
return parentId;
}
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
}
輸出樹形菜單類:
[java] view plain
package com.tree;
import java.util.ArrayList;
import java.util.List;
public class Tree {
private StringBuffer html = new StringBuffer();
private List<Node> nodes;
public Tree(List<Node> nodes){
this.nodes = nodes;
}
public String buildTree(){
html.append("<ul>");
for (Node node : nodes) {
Integer id = node.getId();
if (node.getParentId() == ) {
html.append("\r\n<li id='" + id + "'>" + node.getName()+ "</li>");
build(node);
}
}
html.append("\r\n</ul>");
return html.toString();
}
private void build(Node node){
List<Node> children = getChildren(node);
if (!children.isEmpty()) {
html.append("\r\n<ul>");
for (Node child : children) {
Integer id = child.getId();
html.append("\r\n<li id='" + id + "'>" + child.getName()+ "</li>");
build(child);
}
html.append("\r\n</ul>");
}
}
private List<Node> getChildren(Node node){
List<Node> children = new ArrayList<Node>();
Integer id = node.getId();
for (Node child : nodes) {
if (id.equals(child.getParentId())) {
children.add(child);
}
}
return children;
}
}
G. java 如何遞歸 給樹型結構的元素編號
insert tb_menu(id, name, parent) (640000000000,北京市 ,0);
insert tb_menu(id, name, parent) (640100000000,昌平區 ,1);
insert tb_menu(id, name, parent) (640101000000,霍營 ,2);
insert tb_menu(id, name, parent) (640101001000, 回龍觀東大街,3);
添加一個節點屬性, 根據數據不同代表的地位不同,0就代表父節點 ,1是0的子節點,2是1的子節點,以此類推。
H. 如何用Java實現樹形結構啊
定義一個簡單的菜單類 這里是簡單的示例 你可以自行擴展package entity;import java.util.ArrayList;
import java.util.List;/**
* 菜單類
* @author Administrator
*
*/
public class Menu {
/**
* 菜單標題
*/
private String title;
/**
* 子菜單的集合
*/
private List<Menu> childs;
/**
* 父菜單
*/
private Menu parent;
/**
* 構造函數 初始化標題和子菜單集合
*/
public Menu(String title) {
this();
this.title=title;
}
/**
* 構造函數 創建一個虛擬的父菜單(零級菜單) 所有的一級菜單都歸屬於一個虛擬的零級菜單
*
*/
public Menu() {
this.childs = new ArrayList<Menu>();
}
/**
* 獲取子菜單
* @return
*/
public List<Menu> getChilds() {
return childs;
}
/**
* 獲取標題
* @return
*/
public String getTitle() {
return title;
}
/**
* 獲取父菜單
* @return
*/
public Menu getParent() {
return parent;
}
/**
* 添加子菜單並返回該子菜單對象
* @param child
* @return
*/
public Menu addChild(Menu child){
this.childs.add(child);
return child;
}
/**
* 設置父菜單
* @param parent
*/
public void setParent(Menu parent) {
this.parent = parent;
}
/**
* 設置標題
* @param title
*/
public void setTitle(String title) {
this.title = title;
}
} 測試package entity;
/**
* 測試類
* @author Administrator
*
*/
public class Test { /**
* @param args
*/
public static void main(String[] args) {
/**
* 創建一個虛擬的父菜單 用於存放一級菜單 menu01 和 menu02
*/
Menu root = new Menu();
/**
* 創建兩個一級菜單
*/
Menu menu01 = new Menu("一級菜單01");
Menu menu02 = new Menu("一級菜單02");
/**
* 加入虛擬菜單
*/
root.addChild(menu01);
root.addChild(menu02);
/**
* 為兩個一級菜單分別添加兩個子菜單 並返回該子菜單 需要進一步處理的時候 才接收返回的對象 否則只要調用方法
*/
Menu menu0101 = menu01.addChild(new Menu("二級菜單0101"));
menu01.addChild(new Menu("二級菜單0102"));
menu02.addChild(new Menu("二級菜單0201"));
Menu menu0202 = menu02.addChild(new Menu("二級菜單0202"));
/**
* 添加三級菜單
*/
menu0101.addChild(new Menu("三級菜單010101"));
menu0202.addChild(new Menu("三級菜單020201"));
/**
* 列印樹形結構
*/
showMenu(root);
} /**
* 遞歸遍歷某個菜單下的菜單樹
*
* @param menu
* 根菜單
*/
private static void showMenu(Menu menu) {
for (Menu child : menu.getChilds()) {
showMenu(child, 0);
}
} private static void showMenu(Menu menu, int tabNum) {
for (int i = 0; i < tabNum; i++)
System.out.print("\t");
System.out.println(menu.getTitle());
for (Menu child : menu.getChilds())
// 遞歸調用
showMenu(child, tabNum + 1);
}}
控制台輸出結果 一級菜單01 二級菜單0101
三級菜單010101
二級菜單0102一級菜單02
二級菜單0201
二級菜單0202
三級菜單020201
I. (java)有一個100000個節點的樹形結構,求所有節點數大於L=3小於R=5的路徑的組合,有什麼效率高的方法嗎
如果採用非遞歸演算法實現二叉樹的前序遍歷,需要藉助於棧結構。其步驟如下:
如果根節點rt為空,則返回;否則,首先將根節點壓入棧中,然後迭代執行以下步驟:
1.彈出棧頂存放的節點n,訪問該節點;
2.依次將n的右子節點和左子節點壓入棧中;
3.如果棧不為空,則返回步驟1繼續執行,否則結束迭代。
其中步驟1為節點訪問操作;步驟2中先將右子節點壓入棧中然後再將左子節點壓入,這是因為在棧的彈出操作服從先入後出的准則,根節點訪問結束後需要先訪問的是左子節點,所以左子節點在右子節點之後壓棧;步驟3是遍歷過程終止的條件。
圖二叉樹前序遍歷演算法棧結構動態過程
迭代過稱中利用正沖告了棧結構,圖示的棧結構中棧的大小是固定的,事實上在實現時預先設定好棧的大小並不容易,所以在具體實現時,採用第XX章中討論的鏈式棧,動態調整棧的大小。
中序遍歷
第二種遍歷演算法稱為中序遍歷演算法。與前序遍歷演算法相比,中序遍歷演算法首先訪問節點的左子樹,然後訪問節點自身,最後訪問節點的右子樹。可見,節點自身是在訪問左右子樹中間訪問的,顧稱之為中序。圖中的二叉樹的中序遍歷結果為: