程序-基于节点编号的通用树状菜单设计方法与实现
文件目录结构的树形显示(数据结构课程设计,树、队列,C语言描述)

⽂件⽬录结构的树形显⽰(数据结构课程设计,树、队列,C语⾔描述)⼀、要解决的问题给出某⼀个操作系统下⽬录和⽂件信息,输⼊的数据第⼀⾏为根⽬录节点。
若是⽬录节点,那么它的孩⼦节点将在第⼆⾏中被列出,同时⽤⼀对圆括号“()”界定。
同样,如果这些孩⼦节点中某⼀个也是⽬录的话,那么这个⽬录所包含的内容将在随后的⼀⾏中列出,由⼀对圆括号“()”界定。
⽬录的输⼊输⼊格式为:*name size,⽂件的输⼊输⼊格式为:name size。
Name为⼀串不超过10个字符组成,并且字符串中不能有‘(’,‘)’,‘[‘,’]’和’*’。
Size是该⽂件/⽬录的⼤⼩,⽂件的size输⼊值为该⽂件的⼤⼩,⽬录的size输⼊值都为1。
树结构最多10层,每⼀层最多2个⽂件/⽬录。
要求编程实现将其排列成⼀棵有⼀定缩进的树,输出要求:第d层的⽂件/⽬录名前⾯需要缩进8*d个空格,兄弟节点要在同⼀列上。
并计算每⼀个⽬录⼤⼩,⽬录⼤⼩为所包含的所有⼦⽬录和⽂件⼤⼩以及⾃⾝⼤⼩的总和。
例如输⼊:*/usr 1(*mark 1 *alex 1)(hw.c 3 *course 1) (hw.c 5)(aa.txt 12)输出|_*/usr[24]|_*mark[17]| |_hw.c[3]| |_*course[13]| |_aa.txt[12]|_*alex[6]|_hw.c[3]⼆、算法基本思想描述:采⽤孩⼦兄弟双亲链表的数据存储结构建⽴⼆叉树,再先序遍历该⼆叉树输出所有节点。
输出时,通过parent节点的第⼀个孩⼦是否有兄弟节点控制缩进输出” | ”或” ”;⽬录的⼤⼩为该⽬录左⼦树(以其第⼀个孩⼦为根的树)所有节点的size和加上它本⾝⼤⼩。
三、设计1. 数据结构的设计和说明在⼀开始设计要采⽤的数据结构时,虽然课题只要求“树结构最多10层(树的深度),每⼀层最多2个⽂件/⽬录”,考虑到问题的实际意义,我决定把它优化消除这⼀限制,于是采⽤孩⼦兄弟的数据结构,后来由于缩进输出的需要⼜增加了parent域。
js实现树形结构的方法

js实现树形结构的方法在Web开发中,经常需要展示树形结构的数据,比如文件目录、组织结构等。
JavaScript是一种广泛应用于Web开发的脚本语言,它提供了丰富的方法和技术来实现树形结构的展示和操作。
本文将介绍几种常用的JavaScript方法来实现树形结构,并详细说明每种方法的步骤和实现原理。
一、使用对象和数组实现树形结构1.创建一个对象,表示树的节点。
该对象包含一个value属性,用于存储节点的值;一个children属性,用于存储子节点。
2.创建一个数组,表示树的根节点。
该数组中的每个元素都是一个节点对象。
3.可以通过操作对象和数组,实现树节点的增加、删除和遍历操作。
-增加节点:创建一个新的节点对象,设置其value和children属性,然后将节点添加到指定的父节点的children数组中。
-删除节点:找到要删除的节点对象,并从其父节点的children数组中将这个节点移除。
-遍历节点:使用递归方式遍历节点,可以使用深度优先遍历或广度优先遍历方法。
下面是一个使用对象和数组实现的树形结构示例。
假设有一个组织结构树,根节点为公司,下面有多个部门,每个部门又可以有多个子部门。
每个节点的值为部门的名称。
```javascript//创建根节点var company={value:"公司",children:[]//添加子节点var department1={value:"部门1",children:[]company.children.push(department1);var department2={value:"部门2",children:[]company.children.push(department2);var subDepartment={value:"子部门",children:[]department1.children.push(subDepartment);//删除节点function removeNode(node,parentNode){var index=parentNode.children.indexOf(node);if(index!==-1){parentNode.children.splice(index,1);removeNode(subDepartment,department1);//遍历节点function traverseNode(node){console.log(node.value);for(var i=0;i<node.children.length;i++){ traverseNode(node.children[i]);traverseNode(company);以上示例通过创建对象和数组的方式实现了一个简单的树形结构,并进行了节点的增加、删除和遍历操作。
移动端实现树级菜单的方法

移动端实现树级菜单的方法全文共四篇示例,供读者参考第一篇示例:在移动端开发中,实现树级菜单是一项常见且重要的任务。
在移动设备上,由于屏幕空间有限,设计和实现树级菜单需要考虑到用户体验和界面布局的限制。
本文将介绍一些常见的方法和技巧来实现移动端的树级菜单。
一、使用折叠菜单折叠菜单是一种常见的树级菜单设计模式,适用于移动设备上的界面。
在折叠菜单中,每个父级菜单项下面可以展开或折叠多个子级菜单项,用户可以点击父级菜单项来展开或折叠子级菜单项。
这种设计模式节省了屏幕空间,并且用户可以方便地浏览和操作树状结构的数据。
在实现折叠菜单时,可以使用HTML、CSS和JavaScript来构建。
可以使用HTML的ul和li标签来表示菜单的层级结构,使用CSS样式来控制菜单的外观和布局,使用JavaScript来添加交互效果和实现菜单的展开和折叠功能。
通过合理的布局和样式设计,可以在移动设备上呈现出清晰、易用的树级菜单。
二、利用滑动菜单在实现滑动菜单时,可以利用现有的移动端UI框架或库来快速实现。
一些流行的移动端UI框架,如jQuery Mobile、Ionic等,提供了丰富的界面组件和交互效果,可以帮助开发人员快速构建滑动菜单。
通过合理的布局和交互设计,可以让滑动菜单在移动设备上呈现出流畅、直观的用户体验。
三、响应式设计在设计移动端树级菜单时,需要考虑到不同设备屏幕大小和分辨率的差异。
为了适应不同尺寸的移动设备,可以使用响应式设计的技术来实现自适应的界面布局。
通过使用CSS媒体查询和弹性布局等技术,可以让树级菜单在不同尺寸的屏幕上自动调整布局和样式,确保用户在任何设备上都能够方便地访问和操作菜单。
在移动端实现树级菜单时,需要综合考虑用户体验、界面设计和技术实现等多方面因素。
通过选择合适的设计模式、利用现有的UI框架和工具、采用响应式设计等方法,可以实现一个优秀的移动端树级菜单,为用户提供更好的导航和操作体验。
希望本文介绍的方法和技巧能够帮助开发人员更好地实现移动端树级菜单。
C#→用TreeView实现树菜单

C#→⽤TreeView实现树菜单具体⽅法是:创建⼀个数据库,设计树图信息表S_Menu,包含NodeId、ParentId、NodeName、Address、Icon字段,其它字段根据实际业务⽽定,节点名称NodeName将在树型控件的节点上显⽰,NodeId字段保存节点的唯⼀标识号,ParentId表⽰当前节点的⽗节点号,标识号组成了⼀个“链表”,记录了树上节点的结构。
设计⼀个Web窗体其上放置TreeView控件,修改其属性Id为tvMenu。
数据结构如下:CREATE TABLE [dbo].[S_Menu] ([NodeId] [char] (6) COLLATE Chinese_PRC_CI_AS NULL ,[ParentId] [char] (6) COLLATE Chinese_PRC_CI_AS NULL ,[NodeName] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,[Address] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,[Icon] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL) ON [PRIMARY]GO数据库如下:NodeId ParentId NodeName Address Icon100000 0 公共查询部 icon_document.gif100001 100000 ⼈民币⽇报查询 public/a1.aspx icon_settings.gif100002 100000 外币⽇报查询 public/a2.aspx icon_settings.gif100003 0 分⾏科技部 icon_document.gif100004 100003 ⼈民币⽇报查询 tech/a1.aspx icon_settings.gif100005 100003 外币⽇报查询 tech/a2.aspx icon_settings.gif100006 0 福⽥⽀⾏ icon_document.gif100007 100006 ⽉存款进度表 a1.aspx icon_settings.gif100008 100006 ⽉存款⾛势图 a2.aspx icon_settings.gif100009 0 罗湖⽀⾏ icon_document.gif100010 100009 ⽉存款进度表 a1.aspx icon_settings.gif100011 100009 ⽉存款⾛势图 a2.aspx icon_settings.gifmenu_left.aspx⽂件如下:<%@ Register TagPrefix="iewc" Namespace="Microsoft.Web.UI.WebControls" Assembly="Microsoft.Web.UI.WebControls, Version=1.0.2.226, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Page language="c#" Codebehind="menu_Left.aspx.cs" AutoEventWireup="false" Inherits="hzquery.menu.menu_Left" %><HTML><HEAD><title>menu_Left</title><meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"><meta name="CODE_LANGUAGE" Content="C#"><meta name="vs_defaultClientScript" content="JavaScript"><meta name="vs_targetSchema" content=""></HEAD><body MS_POSITIONING="GridLayout"><form id="menu_Left" method="post" runat="server"><iewc:TreeView id="tvMenu" runat="server"></iewc:TreeView></form></body></HTML>CodeBehind代码如下:using System;using System.Collections;using ponentModel;using System.Data;using System.Drawing;using System.Web;using System.Web.SessionState;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.HtmlControls;using Microsoft.Web.UI.WebControls;using System.Data.SqlClient;namespace hzquery.menu{/// <summary>/// menu_Left 的摘要说明。
c#递归树形菜单

c#递归树形菜单⾸先创建模型类Menuspublic class Menus{//菜单Idpublic int Id { get; set; }//菜单名public string MenuName { get; set; }//⽗节点Idpublic int ParentId { get; set; }}窗体中放⼊button跟TreeView控件声明全局变量private static List<Menus> menus;添加按钮事件private void button1_Click(object sender, EventArgs e){menus = new List<Menus>();menus.Add(new Menus { Id = 1, MenuName = "基础设置", ParentId = 0 });menus.Add(new Menus { Id = 2, MenuName = "采购管理", ParentId = 0 });menus.Add(new Menus { Id = 3, MenuName = "系统设置", ParentId = 1 });menus.Add(new Menus { Id = 4, MenuName = "⽤户管理", ParentId = 1 });menus.Add(new Menus { Id = 5, MenuName = "采购订单", ParentId = 2 });menus.Add(new Menus { Id = 6, MenuName = "采购⼊库", ParentId = 2 });menus.Add(new Menus { Id = 7, MenuName = "⽤户", ParentId = 4 });menus.Add(new Menus { Id = 8, MenuName = "采购退货", ParentId = 2 });menus.Add(new Menus { Id = 9, MenuName = "⽤户组", ParentId = 4 });menus.Add(new Menus { Id = 10, MenuName = "权限管理", ParentId = 4 });//⾸先查出顶级菜单,循环添加IEnumerable<Menus> menu = from m in menus where m.ParentId == 0orderby m.ParentId select m; foreach (var item in menu){TreeNode node = new TreeNode();node.Tag = item;node.Text = item.MenuName;treeView1.Nodes.Add(node);//将当前节点作为参数传⼊⼦节点AddChildMenu(node);}}⼦节点递归实现private void AddChildMenu(TreeNode node){Menus menu = new Menus();menu = (Menus)node.Tag; //将⽗节点转为Model//查出当前⼦节点中所有同⽗节点Id⼀样的数据IEnumerable<Menus> childMenu = from m in menus where m.ParentId == menu.Id orderby m.Id select m; foreach (var item in childMenu){TreeNode childNode = new TreeNode();childNode.Tag = item;childNode.Text = item.MenuName;node.Nodes.Add(childNode); //添加⼦节点AddChildMenu(childNode); //递归调⽤⾃⼰,直到⽗节点添加所有⼦节点结束}}效果展⽰。
JAVA递归生成树形菜单

JAVA递归⽣成树形菜单 递归⽣成⼀个如图的菜单,编写两个类数据模型Menu、和创建树形的MenuTree。
通过以下过程实现: 1.⾸先从菜单数据中获取所有根节点。
2.为根节点建⽴次级⼦树并拼接上。
3.递归为⼦节点建⽴次级⼦树并接上,直⾄为末端节点拼接上空的“树”。
⾸先,编写数据模型Menu。
每条菜单有⾃⼰的id、⽗节点parentId、菜单名称text、菜单还拥有次级菜单children。
1import java.util.List;23public class Menu {4private String id;5private String parentId;6private String text;7private String url;8private String yxbz;9private List<Menu> children;10public Menu(String id,String parentId,String text,String url,String yxbz) {11this.id=id;12this.parentId=parentId;13this.text=text;14this.url=url;15this.yxbz=yxbz;16 }17/*省略get\set*/18 } 创建树形结构的类MenuTree。
⽅法getRootNode获取所有根节点,⽅法builTree将根节点汇总创建树形结构,buildChilTree为节点建⽴次级树并拼接上当前树,递归调⽤buildChilTree不断为当前树开枝散叶直⾄找不到新的⼦树。
完成递归,获取树形结构。
1import java.util.ArrayList;2import java.util.List;34public class MenuTree {5private List<Menu> menuList = new ArrayList<Menu>();6public MenuTree(List<Menu> menuList) {7this.menuList=menuList;8 }910//建⽴树形结构11public List<Menu> builTree(){12 List<Menu> treeMenus =new ArrayList<Menu>();13for(Menu menuNode : getRootNode()) {14 menuNode=buildChilTree(menuNode);15 treeMenus.add(menuNode);16 }17return treeMenus;18 }1920//递归,建⽴⼦树形结构21private Menu buildChilTree(Menu pNode){22 List<Menu> chilMenus =new ArrayList<Menu>();23for(Menu menuNode : menuList) {24if(menuNode.getParentId().equals(pNode.getId())) {25 chilMenus.add(buildChilTree(menuNode));26 }27 }28 pNode.setChildren(chilMenus);29return pNode;30 }3132//获取根节点33private List<Menu> getRootNode() {34 List<Menu> rootMenuLists =new ArrayList<Menu>();35for(Menu menuNode : menuList) {36if(menuNode.getParentId().equals("0")) {37 rootMenuLists.add(menuNode);38 }39 }40return rootMenuLists;41 }42 } 最后,插⼊⼀些数据试试效果。
树的实现及其应用

树的实现及其应用树(Tree)是一种非常重要的数据结构,它在计算机科学中有着广泛的应用。
树是由节点(Node)和边(Edge)组成的一种层次结构,其中一个节点可以有零个或多个子节点。
树结构中最顶层的节点称为根节点(Root),最底层的节点称为叶节点(Leaf),除了根节点外,每个节点有且仅有一个父节点。
一、树的基本概念在树的结构中,每个节点可以有多个子节点,这些子节点又可以有自己的子节点,以此类推,形成了树的层次结构。
树的基本概念包括以下几个要点:1. 根节点(Root):树结构的最顶层节点,没有父节点。
2. 叶节点(Leaf):树结构的最底层节点,没有子节点。
3. 父节点(Parent):一个节点的直接上级节点。
4. 子节点(Child):一个节点的直接下级节点。
5. 兄弟节点(Sibling):具有相同父节点的节点互为兄弟节点。
6. 子树(Subtree):树中的任意节点和它的子节点以及这些子节点的子节点构成的子树。
7. 深度(Depth):从根节点到某个节点的唯一路径的边的数量。
8. 高度(Height):从某个节点到叶节点的最长路径的边的数量。
二、树的实现树的实现可以通过多种方式来完成,其中最常见的是使用节点和指针的方式来表示树结构。
在实际编程中,可以通过定义节点类(NodeClass)来表示树的节点,然后通过指针来连接各个节点,从而构建出完整的树结构。
下面是一个简单的树节点类的示例代码:```pythonclass TreeNode:def __init__(self, value):self.value = valueself.children = []```在上面的示例中,TreeNode类表示树的节点,每个节点包含一个值(value)和一个子节点列表(children)。
通过不断地创建节点对象并将它们连接起来,就可以构建出一棵完整的树。
三、树的遍历树的遍历是指按照一定顺序访问树中的所有节点。
el-tree 树状设置样式

el-tree 树状设置样式el-tree是一个常用的树状结构的组件,它可以用来展示具有层级关系的数据。
本文将介绍el-tree的使用方法,并通过实例来展示其功能和样式设置。
## 1. el-tree的基本使用方法el-tree是基于Element UI框架开发的树状组件,使用前需先引入Element UI库,并按需引入el-tree组件。
```javascriptimport { Tree } from 'element-ui';```el-tree的基本使用方法如下:```html<template><div><el-tree:data="treeData":props="treeProps":expand-on-click-node="false"show-checkboxdefault-expand-all@check-change="handleCheckChange" ></el-tree></div></template><script>export default {data() {return {treeData: [{id: 1,label: '节点1',children: [{id: 11,label: '节点1-1'},{id: 12,label: '节点1-2'}]},{id: 2,label: '节点2',children: [{id: 21,label: '节点2-1' },{id: 22,label: '节点2-2' }]}],treeProps: {children: 'children', label: 'label'}};},methods: {handleCheckChange(data, checkedNodes) {console.log(data, checkedNodes);}}};</script>```## 2. el-tree的样式设置el-tree提供了多种样式设置选项,可以根据需要进行个性化定制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附录:基于节点编号的通用树状菜单设计源代码 说明: 本例实现了 TC20 的界面菜单,代码开发实现环境为 TC20。共 2 个文件: 1:memu.c-代码文件; 2:menu.h -菜单节点定义的头文件 1:memu.c -C 代码文件 /* This menu select demo programing, It define menu as binary tree, * Menu data is from TC20 software'menu. * By Peng liangqing * data:2001-9-26 */ #include<stdio.h> #include<graphics.h> #include<conio.h> #include<process.h> #include<stdlib.h> #include<menu.h> void initmenutree(void); MENU *getpmenumfromID(int id); void menuwindisplay(MENU *pmenu); MENU *menuselect(MENU *pmenu,int key); void delmenuwin(MENU *pmenu); void menucurdisplay(MENU *pmenu, int i); void delmenucur(MENU *pmenu, int i); /* 以下为功能菜单节点函数原型定义 */ void fmenu111(void); void fmenu112(void); void fmenu114(void); void fmenu115(void); void fmenu117(void); void fmenu118(void); void fmenu12(void); void fmenu14(void); void fmenu16(void); void fmenu17(void); void fmenu131(void); void fmenu132(void); void fmenu134(void); void fmenu135(void); void fmenu141(void); void fmenu142(void); void fmenu144(void); void fmenu145(void); void fmenu151(void); void fmenu152(void); void fmenu154(void); void fmenu155(void); void fmenuprocess(void);
单片机与嵌入式系统应用杂志-2002 年第 9 期
*getpmenumfromID(int id)
基于节点编号的通用树状菜单设计方法与实现
textcolor(FRIST_ALPHA_COLOR); textcolor(pmenu->wcolor); }; }
putch( pmenu->name[i][0]); cputs( (pmenu->name[i])+1);
void menucurdisplay(MENU *pmenu, int cur) { window(pmenu->x0,pmenu->y0,pmenu->x0+pmenu->width,pmenu->y0+pmenu->high); if(pmenu->dir==XDIR) gotoxy(cur*(pmenu->width/pmenu->total), 1); else gotoxy(2,cur+1+1); textbackground(pmenu->wcolor); textcolor(pmenu->bcolor); cputs( pmenu->name[cur]); } void delmenucur(MENU *pmenu, int cur) { window(pmenu->x0,pmenu->y0,pmenu->x0+pmenu->width,pmenu->y0+pmenu->high); if(pmenu->dir==XDIR) gotoxy( cur*(pmenu->width/pmenu->total), 1); else gotoxy(2,cur+1+1); textbackground(pmenu->bcolor); textcolor(FRIST_ALPHA_COLOR); putch( pmenu->name[cur][0]); textcolor(pmenu->wcolor); cputs( (pmenu->name[cur])+1); } MENU *menuselect(MENU *pmenu, int key) { int cur,i; switch(key) { case RIGHT_KEY: if (pmenu->dir==YDIR)break; delmenucur(pmenu, pmenu->cur++); if ( pmenu->cur == pmenu->total ) pmenu->cur=0; menucurdisplay(pmenu, pmenu->cur);
MENU *pmenu; void main(void) { int key, i;
textmode(C80); textbackground(WHITE); clrscr(); window(1,2,80,25); textbackground(WINDOW_BACK_COLOR); window(1,25,80,25); textbackground(WHITE); clrscr(); initmenutree( ); pmenu=&menus[0]; menuwindisplay(pmenu); menucurdisplay(pmenu,pmenu->cur); while(1) { key=getch(); pmenu=menuselect(pmenu,key); if (pmenu->total> 1 ) continue; i=0; do { if(FunTab[i].MenuID==pmenu->ID) break; i++;
单片机与嵌入式系统应用杂志-2002 年第 9 期
基于节点编号的通用树状菜单设计方法与实现
break; case LEFT_KEY: if (pmenu->dir==YDIR)break; delmenucur(pmenu, pmenu->cur--); if ( pmenu->cur < 0 ) pmenu->cur=pmenu->total-1; menucurdisplay(pmenu, pmenu->cur); break; case UP_KEY: if (pmenu->dir==XDIR) break; delmenucur(pmenu, pmenu->cur--); if ( pmenu->cur < 0 ) pmenu->cur=pmenu->total-1; menucurdisplay(pmenu, pmenu->cur); break; case DOWN_KEY: if (pmenu->dir==XDIR)break; delmenucur(pmenu, pmenu->cur++); if ( pmenu->cur == pmenu->total ) pmenu->cur=0; menucurdisplay(pmenu, pmenu->cur); break; case ENTER_KEY: cur=pmenu->cur; pmenu=pmenu->down; for(i=0; i<cur; i++) pmenu=pmenu->right; if( pmenu->total>1 ) { pmenu->cur = 0; menuwindisplay(pmenu); menucurdisplay(pmenu, pmenu->cur); }; break; case ESC_KEY: if( pmenu->up!=NULL) { delmenuwin(pmenu); pmenu=pmenu->up; }; break; default: ; }; return(pmenu); } /* 以下为功能菜单节点 */ void fmenu111(void){ fmenuprocess(); } void fmenu112(void){ fmenuprocess(); } void fmenu113(void){ fmenuprocess(); } void fmenu114(void){ fmenuprocess(); } void fmenu115(void){ fmenuprocess(); } void fmenu116(void){ fmenuprocess(); } void fmenu117(void){ fmenuprocess(); } void fmenu118(void){ fmenuprocess(); }
单片机与嵌入式系统应用杂志-2002 年第法与实现
struct function_menu_table { int MenuID; void ( *pfmenu)(void); } FunTab[]= { 111,fmenu111, 112,fmenu112, 113,fmenu113, 114,fmenu114, 115,fmenu115, 116,fmenu116, 117,fmenu117, 118,fmenu118, 119,fmenu119, 12, fmenu12, 14, fmenu14, 141,fmenu141, 142,fmenu142, 143,fmenu143, 144,fmenu144, 145,fmenu145, 146,fmenu146, 15, fmenu15, 151,fmenu151, 152,fmenu152, 153,fmenu153, 154,fmenu154, 155,fmenu155, 16, fmenu16, 17, fmenu17, 18, fmenu18, 131,fmenu131, 132,fmenu132, 133,fmenu133, 134,fmenu134, 135,fmenu135, 136,fmenu136, -1,NULL, };