`
zhyt710
  • 浏览: 206452 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

树形菜单与遍历多叉数

阅读更多

在公司做了一个树形菜单。由于要基于公司的soa架构,返回客户端的字符是ajax返回的json字符串。于是自己就采用了xtree开源静态的javascript树形控件。通过自己的javascript版本掉用之。


主要用到的javascript方法如下:

 

/**
* 初始化树形菜单
*/
function initPartTreeView(data) {

	/** 从后台服务传回来的数据结构类似如下数据的数据结构
	var data = {"id": "0", "name": "root", "childrenList": [
					{"id": "1", "name": "name1", "childrenList": [{"id": "11", "name": "name11"}]}, 
					{"id": "2", "name": "name2", "childrenList": []},
				    {"id": "3", "name": "name3", "childrenList": [] }
			    ]};
	**/

	//组装树
	tree = intiCircle(tree, data);
	document.getElementById("partTreeView").innerHTML = tree;
}

/**
*  用递归的方法初始化树形菜单
*/
function intiCircle(tree,data) {
    var id = data.id;
	var name = data.name;
	var treeItem = new WebFXTreeItem(name, "javascript: showDeptAndStuff('" + id + "')");
	
	//如果没有根节点则首先创建根节点
	if(!tree) {
	    tree = new WebFXTree(data.name, "javascript: showDeptAndStuff('" + id + "')");
		treeItem = tree;
	} else {
	   tree.add(treeItem);
	}

    //循环递归构建子节点
	var relist = data.childrenList;
	if(relist) {
	   for(var i = 0; i < relist.length; i++) {
	       var ddate = relist[i];
		   intiCircle(treeItem, ddate);
	   }
	}
	
	return tree;
}

 

主要用到的后台java代码如下:

 

/**
	 * 根据 上级部门No 得到部门树状字符串
	 * @param id
	 * @return
	 */
	@Override
	public String getBranchTreeString(String parentNO) {
		
		//得到相同级别部门(在同一部门下的)列表
		List branchList = this.getBranch(parentNO);
		
		String jsonString = "";
		
		//循环组装同级部门
		for(int i = 0; i < branchList.size(); i++) {
			DataObject dataObject = (DataObject) branchList.get(i);
			//如果前边已经有项目,则用","分开
			if(!jsonString.equals("")) {
				jsonString = jsonString + " , ";
			}
			jsonString = jsonString + "{ \"id\": \"" + dataObject.getString("DEP_NO") + "\""
			        + " , \"name\": \"" + dataObject.getString("DEP_NAME") + "\""
			        + " , \"childrenList\": [" + this.getBranchTreeString(dataObject.getString("DEP_NO")) + "]"
			        + " }";
		}
		
		return jsonString;
	}
	
	/**
	 * 得到相同上级部门的部门列表
	 * @param parentNO 上级部门No
	 * @return
	 */
	public List getBranch(String parentNO) {
		
		//组装参数
		Map param = new HashMap();
		param.put("SUPER_DEP_NO", parentNO);
		
		DataObject dataObject = das.excuteQuery("SelectDepartInforBySuperDeptNoForBranchTree", param);
		
		return dataObject.getList("DEPT_INFO");		
	}

 

 

上面的代码并不完整,因为只是为了表达一个意思,就是树形菜单和多叉树的关系。简而言之,多叉数其实就是树形菜单的一个数据结构模型。以前在学校学数据结构的的时候,从用c++写过遍历多叉树的东西。这几天做了一个无限级树形菜单,在做的时候也没有想到在学校学习的东西。等做完了才突然间意识到自己写了一个遍历多叉数的算法。而且这个算法的核心就是“递归调用”。

分享到:
评论

相关推荐

    layui树形菜单动态遍历的例子

    总的来说,layui的树形菜单动态遍历功能结合了前端与后端的数据交互,提供了灵活的节点生成机制,可以适应各种动态数据场景。通过这样的方式,开发者可以根据实际需求构建复杂且可扩展的树形结构,提升用户体验。

    基于内存多叉树的Ext JS无限级树形菜单实现方案

    为了实现无限级树形菜单,首先需要将数据库中的层次数据转化为内存多叉树,然后通过遍历算法将这个多叉树转换为JSON格式。具体步骤如下: - **读取层次数据**:使用数据库查询语句获取组织结构数据,这些数据通常...

    java解析xml动态生成树形菜单结构

    在IT行业中,构建动态的树形菜单结构是常见的需求,特别是在Web应用中,用于组织和展示层次化的数据,如导航菜单、权限管理等。在这个场景下,`Java`作为后端语言负责处理业务逻辑和数据解析,`XML`作为数据交换格式...

    树形菜单增删改

    在不同的开发环境中,如Java、JavaScript或Python,都有对应的库和API支持树形菜单的构建与操作。 总结起来,树形菜单的增删改查涉及数据结构的设计、数据的读写操作、前端的渲染逻辑以及可能的性能优化。理解这些...

    多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法).pdf

    本文以Ext JS为例,探讨如何构建无限级树形菜单,即处理数据库中无限层级的数据,并将其转化为适合树形控件显示的JSON格式。 首先,理解无限级树形菜单的概念。这种菜单没有固定的层级限制,数据来源于数据库中具有...

    基于C++树形菜单控件源代码

    树形菜单控件是一种常见的用户界面元素,常用于展示层次结构的数据,如文件系统、组织结构或任务分类等。本文将深入探讨基于C++实现的树形菜单控件,以及其核心功能和实现细节。 首先,"基于C++树形菜单控件源代码...

    JS实现树形结构.rar

    在JavaScript中,实现树形结构是一项常见的任务,特别是在前端开发中,例如构建文件系统、组织菜单、展现数据层级等。树形结构是一种数据结构,它由节点(或称为元素)组成,每个节点可以有零个或多个子节点,形成一...

    树形结构博客目录

    1. **树形结构基本概念**:包括树的定义、术语(如节点、根节点、叶节点、子节点、父节点、兄弟节点)以及树的表示方法(如二叉树、多叉树、满树、完全树等)。 2. **树的存储方式**:讨论了如何在内存中存储树结构...

    java、js中实现无限层级的树形结构方法(类似递归)

    在实际应用中,这种无限层级的树形结构可以用于实现如文件浏览器、组织架构图、导航菜单等功能。为了优化性能,可以考虑使用懒加载策略,只在需要时加载特定层级的节点,避免一次性加载大量数据。此外,对于大规模...

    jsp动态生成目录树

    在提供的文件名`JSP与树型菜单--diegoyun`中,可能包含了一个示例JSP页面和一个用于生成树形菜单的JavaScript库,可以作为学习和实践这个过程的参考。 总结来说,利用JSP和Access数据库生成目录树,能够实现数据的...

    treenode.rar

    在IT领域,TreeNode是数据结构中的一个重要概念,特别是在树形数据结构中。树是一种非线性的数据结构,它由若干个节点(TreeNode)通过边连接而成,这些节点代表了数据,而边则表示它们之间的关系。TreeNode是构成树...

    单片机多级菜单程序

    - **树形结构(Tree Structure)**:多级菜单也可以看作是一种树形结构,根节点代表主菜单,子节点表示子菜单,每个节点可能有多个子节点,形成多叉树。这种结构有利于快速导航和查找菜单项。 3. **内存管理**: ...

    三级菜单选择器

    常见的数据结构有树形结构(如二叉树或多叉树)或数组嵌套。在“multitree”中,可能使用了JSON对象或者自定义的类来表示树节点及其子节点。 2. 展开与折叠:为了提供良好的用户体验,用户应能自由地展开和折叠各级...

    无限级联 n叉树

    本话题聚焦于“无限级联n叉树”,这是一个动态构建和操作的树形结构,具有多个子节点(分支)的每个节点,且层级不受限制。在JavaScript中实现这种数据结构对于前端开发,特别是构建复杂用户界面和组织大量数据时,...

    数据结构—课程设计(家谱树管理系统)

    2. **树结构**:家谱树本身就是一个树形数据结构,可能采用了二叉树或者多叉树的形式。每个节点包含成员信息(如姓名、出生日期等)以及指向其父节点和子节点的引用。 3. **深度优先搜索(DFS)和广度优先搜索(BFS...

    窗体界面程序设计(含数据结构)

    标题提及的"查找与替换"、"启动界面程序"、"日立记事本"、"文件目录树"以及"最简单的树形结构"都是窗体界面程序设计中的关键概念。 首先,让我们来看“查找与替换”功能。在大多数应用程序中,用户可能需要搜索文本...

    demo.zip_DEMO_树状图

    在数据结构中,二叉树和多叉树等都是树形结构的变体,它们提供了不同的操作效率和适用场景。 5. **优化与性能:** 当树图规模较大时,展开和折叠操作的性能至关重要。为了提高效率,可以采用预加载、懒加载等策略...

Global site tag (gtag.js) - Google Analytics