1. 程式人生 > >Java遞迴應用:輸出樹形選單

Java遞迴應用:輸出樹形選單

樹節點類:
package cn.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;
	}
}
輸出樹形選單類:
package cn.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() == null) {
				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;
	}
}

測試類:

package zzj.test;

import java.util.ArrayList;
import java.util.List;

import cn.com.tree.Node;
import cn.com.tree.Tree;


public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<Node> nodes = new ArrayList<Node>();
		
		Node node1 = new Node();
		node1.setId(1);
		node1.setName("node1");
		node1.setParentId(null);
		node1.setLink(null);
		nodes.add(node1);
		
		Node node11 = new Node();
		node11.setId(11);
		node11.setName("node11");
		node11.setParentId(1);
		node11.setLink(null);
		nodes.add(node11);
		
		Node node111 = new Node();
		node111.setId(111);
		node111.setName("node111");
		node111.setParentId(11);
		node111.setLink(null);
		nodes.add(node111);
		
		Node node12 = new Node();
		node12.setId(12);
		node12.setName("node12");
		node12.setParentId(1);
		node12.setLink(null);
		nodes.add(node12);
		
		Node node2 = new Node();
		node2.setId(2);
		node2.setName("node2");
		node2.setParentId(null);
		node2.setLink(null);
		nodes.add(node2);
		
		Node node21 = new Node();
		node21.setId(21);
		node21.setName("node21");
		node21.setParentId(2);
		node21.setLink(null);
		nodes.add(node21);
		
		Node node3 = new Node();
		node3.setId(3);
		node3.setName("node3");
		node3.setParentId(null);
		node3.setLink(null);
		nodes.add(node3);
		
		Tree tree = new Tree(nodes);
		System.out.println(tree.buildTree());
	}
}

輸出:

<ul>
<li id='1'>node1</li>
<ul>
<li id='11'>node11</li>
<ul>
<li id='111'>node111</li>
</ul>
<li id='12'>node12</li>
</ul>
<li id='2'>node2</li>
<ul>
<li id='21'>node21</li>
</ul>
<li id='3'>node3</li>
</ul>
瀏覽器效果:


相關推薦

Java應用輸出樹形選單

樹節點類:package cn.com.tree; public class Node { private Integer id; private Integer parentId; priv

關於呼叫,實現樹形選單的樣式

一:需求   現有以需求就是把某一個帖子的全部評論展示出來。 二:分析   關於對帖子的評論分為主評論和子評論,主評論就是對帖子的直接評論,子評論就是對評論的評論。 三:思路   先獲取某一個帖子的全部主評論,遞迴判斷是否有子評論,獲取子評論。 四:編碼   實體類: 1 import

通過java思想實現以樹形方式展現出該目錄中的所有子目錄和檔案

當初在開始接觸Java時  學習File部分的一個小練習  挺有意思 一開始是通過看 北京聖思園 張龍老師的視訊開始學校java的,必須強烈推薦,真很棒。 功能實現:主要實現以樹形方式展現出該目錄中的所有子目錄和檔案。 另外, 在展現的時候將目錄排在上面,檔案排在下面。每一層要加上縮排。 檔案是jre6資料

java 查詢樹形選單結構(個人認為是最簡單的)

/** * 獲取無限級的類別資源 */ @Override public List<Object> findTypeTree() throws BusinessException

資料結構——棧的應用經典Hanoi)

程式碼來源於:【資料結構】【嚴蔚敏】 遞迴經典問題:漢諾塔(插個題外話哈,Hanoi是越南首都河內) 思路(關鍵理解點): 假設只有兩個盤子(實在沒法完全理解全部過程的,把兩個盤子的過程捋清楚了,程式碼也就記住了) (n=2,x=a,y=b,z=c) { hanoi(1,x,z,y);

Java拼接json樹形結構

最近在專案開發過程中遇到一個問題,前臺需要用到echarts元件中的旭日圖來顯示層級關係,這就需要我將後臺Sql查詢出來的json陣列拼接成多級巢狀的樹形結構返回前臺 ,類似於 而我從資料庫中查出來的資料時這樣的: {"prog_level_id_1":"5","

JAVA:實現輸出正整數和等於n的所有不增的正整數和式

遞迴實現輸出正整數和等於n的所有不增的正整數和式(JAVA) 碰到遞迴,瞬間感覺腦細胞不夠用了 其實感覺並沒有用到遞迴的精髓,更像是窮舉遍歷,把後面的判斷條件放到外面main函式 就完全是窮舉了 關

【thinkphp】thinkphp迴圈欄目按照樹形結構無限極輸出

thinkphp遞迴迴圈欄目按照樹形結構無限極輸出,並儲存為一個數組,利於模板呼叫 private function  categoryTree($parentid,$level)   //因為是本類中使用所以定於為私有函式 { $Category= D('

Java實現整數倒敘輸出

package Test; public class Test04 { public static void main(String[] args) { int num = dz(123); System.out.println(num); } priv

java 輸出文數字

  遞迴 輸出迴文數字  例如:引數:4 輸出:4321234。程式如下: public class TestDG {  public int fun(int var) {     if(var>1){   System.out.println(var);   Syst

Java 演算法 求和 查詢動態選單

public class Test { private int sum=0,num=1; public int calSum(int maxnum){ if(num<=maxnum){ sum+=n

java 遍歷樹形結構

//選單樹形結構 public JSONArray treeMenuList(JSONArray menuList, int parentId) { JSONArray childMenu = new JSONArray(); f

Java練習

public class TestDiGui { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(f(5));

Python lambda匿名函式,應用

import os '''Lambda函式能接收任何數量的引數但只能返回一個表示式的值匿名函式不能直接呼叫print,因為lambda需要一個表示式'''sum = lambda x, y: x + yprint('x+y=', sum(2, 6)) '''匿名函式應用''' def test_nm(a

Java刪除空資料夾

import java.io.File; public class ClearFile { static int iFile = 0; public static void main(String[] args) { // TODO Auto-generated method s

JavaScript遍歷輸出json所有欄位與值的方法

宣告一個三層的json物件作為測試: var js={          "text":"MXCHIP won a prize",          "id": 1234,   &nbs

java簡單例項

1.自己的第一篇部落格,想把自己的覺得有用的記錄下來,也可以鍛鍊自己的表達能力。內容談不上豐富,如果寫的不好,請大家多多包涵。 2.廢話不多說,就是幹,先準備下指令碼 drop TABLE IF EXISTS category; CREATE TABLE `category` ( &nb

JAVA——實現n的階乘

n的階乘的演算法:n*(n-1)*(n-2)… *1 例如5的階乘為:5 * 4 *3 * 2 * 1 程式碼如下: //遞迴實現n的階乘 import java.util.Scanner; public class Factorial1{ //實現階乘的方法——使用遞迴 //要接收一

跳臺階

/** *題目: 跳臺階 *描述:一隻青蛙一次可以跳上1級臺階,也可以跳上2級。求該青蛙跳上一個n級的臺階總共有多少種跳法。 *解決方案:方法一:思路:舉例說明並從中找到規律,列出臺階數和跳法之後,發現裴波那契列類似 *    

斐波那契數列

/** * 題目:斐波那契數列     * 描述:大家都知道斐波那契數列,現在要求輸入一個整數n,請你輸出斐波那契數列的第n項。n<=39 * 解決方案:方法一:遞迴 *      &