JS 中 :
var znodes = [{id: 0, pid: -1, name: "aaaa"}, {id: 1, pid: 0, name: "a"}, {id: 11, pid: 1, name: "a1"}, {id: 12, pid: 1, name: "a2"}, {{id: 13, pid: 1, name, "a2"}, {{{{id: 13, pid: 1, name, "a2"}, {{{{id: 13, pid: 1, name, name "a2"}, {{{id: 13, pid: 1, name, "a3"}, {{{{id: 13, pid: 1, name, "a3"} {id:2,pId:0,name:"B"}, {id:21,pId:2,name:"B1"}, {id:22,pId:2,name:"B2"}, {id:23,pId:2,name:"B3"}, {id:3,pId:0,name:"C"}, {id:31,pId:3,name:"C1"}, {id: 32, pid: 3, name: "c2"}, {id: 33, pid: 3, name: "c3"}, {id: 34, pid: 31, name: "x"}, {id: 35, pid: 31, name: "y"}, {id: 36, pid: 31, name: "z"},},},},},},},},},} {id: 37, pid: 36, name: "z1123"}, {id: 38, pid: 37, name: "z123123123"}]; Funktion treemenu (a) {this.tree = a || []; this.groups = {};}; treemenu.prototype = {init: function (pid) {this.group (); return this.getdom (this.groups [pid]); }, Gruppe: function () {for (var i = 0; i <this.tree.length; i ++) {if (this.groups [this.tree [i] .pid]) {this.groups [this.tree [i] .pid] .push (this.tree [i]); } else {this.groups [this.tree [i] .pid] = []; this.groups [this.tree [i] .pid] .push (this.tree [i]); }}}, getdom: function (a) {if (! a) {return ''} var html = '/n <ul>/n'; für (var i = 0; i <A.Length; i ++) {html+= '<li> <a href = "#">'+a [i] .Name+'</a>'; html+= this.getdom (this.groups [a [i] .id]); html+= '</li>/n'; }; html+= '</ul>/n'; Rückgabe html; }}; var html = new treemenu (Znodes) .init (0); alert (html);Java:
Pakettest; import Java.util.ArrayList; Import Java.util.comParator; import Java.util.hashMap; Import Java.util.iterator; import Java.util.list; Import Java.util.map; main (string [] args) {// 读取层次数据结果集列表 list datalist = virtualDatagenerator.getVirtualResult (); // 节点列表(散列表 , 用于临时存储节点对象) HashMap nodelist = new Hashmap (); // 根节点 node root = null; // 根据结果集构造节点列表(存入散列表) für (iterator it = datalist.iterator (); it.hasNext ();) {map datArecord = (map) it.next (); Node node = new node (); node.id = (string) datArecord.get ("id"); node.text = (string) datarecord.get ("text"); node.parentid = (string) datArecord.get ("parentId"); nodelist.put (node.id, node); } // 构造无序的多叉树 Einstiegsset = nodelist.entrySet () setzen; für (iterator it = Eintragset.Iderator (); it.hasnext ();) {node node = (node) ((map.entry) it.next ()). getValue (); if (node.parentid == null || node.parentid.equals ("") {root = node; } else {((Knoten) nodelist.get (node.parentid)). addChild (Knoten); }} // 输出无序的树形菜单的 json 字符串 System.out.println (root.toString ()); // 对多叉树进行横向排序 root.sortchildren (); // 输出有序的树形菜单的 json 字符串 System.out.println (root.toString ()); // 程序输出结果如下(无序的树形菜单)(格式化后的结果): // { // id : '100000', // text : '廊坊银行总行', // children : [ // { // id : '110000', // text : '廊坊分行', // children : [ // { // id : '113000', // text : '廊坊银行开发区支行', // leaf : true // }, // { // id : '111000', // text : '廊坊银行金光道支行', // Blatt: true //}, // {// id: '112000', // text: '廊坊银行解放道支行', // Kinder: [// {// id: '112200', // text: '廊坊银行三大街支行', // blatt: true //}, // {// id: '112100', // // // // text: '廊坊银行广阳道支行 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行', 廊坊银行广阳道支行 ', 廊坊银行广阳道支行'. } // ] // } // 程序输出结果如下(有序的树形菜单)(格式化后的结果): // { // id : '100000', // text : '廊坊银行总行', // children : [ // { // id : '110000', // text : '廊坊分行', // children : [ // { // id : '111000', // text : '廊坊银行金光道支行', // leaf : true // }, // { // id : '112000', // text : '廊坊银行解放道支行', // children : [ // { // id : '112100', // text : '廊坊银行广阳道支行', // leaf : true // }, // { // id : '112200', // text : '廊坊银行三大街支行', // leaf : true // } // ] // }, // { // id : '113000', // text : '廊坊银行开发区支行', // leaf : true //} //] //} //] //}}}/*** 节点类*/class Node {/***节点编号*/public String id; / ** * 节点内容 */ Public String Text; / ** * 父节点编号 */ public String parentId; / ** * 孩子节点列表 */ Private Kinder Kinder = neue Kinder (); // 先序遍历 , 拼接 json 字符串 public String toString () {String result = "{" + "id: '" + id + "'" + ", text: '" + text + "'"; if (Kinder! } else {result += ", blatt: true"; } Rückgabeergebnis + "}"; } // 兄弟节点横向排序 public void sortchildren () {if (Kinder! }} // 添加孩子节点 public void addChild (Knotenknoten) {this.children.addchild (Knoten); }}/*** 孩子列表类*/class children {private listlist = new ArrayList (); public int getSize () {return list.size (); } public void addChild (Knotenknoten) {list.add (Knoten); } // 拼接孩子节点的 json 字符串 public String toString () {String result = "["; für (iterator it = list.iterator (); it.hasnext ();) {result += ((knoten) it.next ()). toString (); Ergebnis += ","; } result = result.substring (0, result.Length () - 1); Ergebnis += "]"; Rückgabeergebnis; } //. // 对每个节点的下一层节点进行排序 für (iterator it = list.iterator (); it.hasnext ();) {((Knoten) iT.Next ()). Sortchildren (); }}}/** * 节点比较器 */class nodeIdComparator implementiert den vergleicher {// 按照节点编号比较 public int compare (Objekt O1, Objekt O2) {int j1 = integer.parseInt (((Knoten) O1) .ID); int j2 = Integer.ParseInt (((Knoten) O2) .ID); return (j1 <j2? -1: (j1 == j2? 0: 1)); }}/** * 构造虚拟的层次数据 */class virtualDatagenerator {// 构造无序的结果集列表 , 实际应用中 , 该数据应该从数据库中查询获得; 该数据应该从数据库中查询获得; public static list getVirtualResult () {list datalist = new ArrayList (); HashMap DataCord1 = new HashMap (); DataRecord1.put ("ID", "112000"); DataRecord1.put ("Text", "廊坊银行解放道支行"); DataRecord1.put ("ParentID", "110000"); HashMap DataCord2 = new HashMap (); DataRecord2.put ("ID", "112200"); DataRecord2.put ("Text", "廊坊银行三大街支行"); DataRecord2.put ("ParentID", "112000"); HashMap DataCord3 = new HashMap (); DataRecord3.put ("ID", "112100"); DataRecord3.put ("Text", "廊坊银行广阳道支行"); DataRecord3.put ("ParentID", "112000"); HashMap DataCord4 = new HashMap (); DataRecord4.put ("ID", "113000"); DataRecord4.put ("Text", "廊坊银行开发区支行"); DataRecord4.put ("ParentID", "110000"); HashMap DataCord5 = new HashMap (); DataRecord5.put ("ID", "100000"); DataRecord5.put ("Text", "廊坊银行总行"); DataRecord5.put ("parentId", ""); HashMap DataCord6 = new HashMap (); DataRecord6.put ("ID", "110000"); DataRecord6.put ("Text", "廊坊分行"); DataRecord6.put ("ParentID", "100000"); HashMap DataCord7 = new HashMap (); DataRecord7.put ("ID", "111000"); DataRecord7.put ("Text", "廊坊银行金光道支行"); DataRecord7.put ("ParentID", "110000"); Datalist.Add (DataRecord1); Datalist.Add (DataRecord2); Datalist.Add (DataRecord3); Datalist.Add (DataRecord4); Datalist.Add (DataRecord5); Datalist.Add (DataRecord6); Datalist.Add (DataRecord7); Datalist zurückgeben; }}以上这篇 Java 、 js 中实现无限层级的树形结构方法 (类似递归) 就是小编分享给大家的全部内容了 , 希望能给大家一个参考 , 也希望大家多多支持武林网。 也希望大家多多支持武林网。 也希望大家多多支持武林网。 也希望大家多多支持武林网。 也希望大家多多支持武林网。 也希望大家多多支持武林网。 中实现无限层级的树形结构方法)