树形结构

二叉树的树形结构打印

回眸只為那壹抹淺笑 提交于 2019-12-05 03:43:25
打印树形结构初衷 树形结构是算法里很常见的一种数据结构,从二叉树到多叉树,还有很多变种。每当需要程序员自己手动实现树形结构时,因为结构本身的复杂性,不容易调试验证。但一般的调试对树形数据结构的整体把控十分有限,甚至会让人迷失在一大堆的调试信息海洋里。如果能够将数据树形打印出来,那么我们理解树形结构的算法就事半功倍。 树形打印方式 我们知道 Linux 有个 tree 命令用来打印树状目录列表,可以将某个目录下的所有文件和子目录一览无遗,非常直观,本文可以说就是为了实现这个效果,并给出源码实现。 树形打印可分为深度优先和广度优先两种。虽然广度优先更加直观,但基于我们的屏幕宽度不够,难以容纳整棵树,所以采用深度优先的方式。并且先打印右子树再打印左子树,测着头观察数据更加直观,哈哈! #ifndef _AVLTREE_H #define _AVLTREE_H #include <iostream> template<typename T> class avlnode { public: T val; avlnode* left; avlnode* right; avlnode(T x) :val(x), left(nullptr), right(nullptr) {} }; template<typename T> class avltree { typedef avlnode<T>

jsTree异步动态加载子节点

♀尐吖头ヾ 提交于 2019-12-04 21:39:55
1.项目环境 想要将显示区域作为查询的条件,而区域是树形结构并且可以多选,并且数据量很大,是从中国到乡镇的地区数据,如果我们一次将所有的区域数据查出直接塞到树形结构,那么页面将会卡死,因此我们需要每次加载部分数据,如果展开下级,那么显示下一级所有的区域,这样可以解决数据量大而导致页面无法缓存的问题。 2.导入样式表 <link type="text/css" rel="stylesheet" href="../js/jsTree/themes/default/style.min.css"> 3.导入js包 <!-- jquery的js包 --> <script type="text/javascript" src="../js/jquery.min.js"></script> <!-- jsTree树形结构插件--> <script type="text/javascript" src="../js/jsTree/jstree.min.js"></script> 4.html <div id="regionTree" style="margin-left:20px;"></div> 5.区域树 function initRegionTree(){ $("#regionTree").jstree({ 'plugins' : ["checkbox"], //出现选择框

设计模式

谁都会走 提交于 2019-12-04 21:00:22
1、说下你知道的设计模式有哪些? 下面 3 种类型中各挑几个常见的或者你用过的说就可以了。 2、工厂方法模式和抽象工厂模式有什么区别? 工厂方法模式: 一个抽象产品类,可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类只能创建一个具体产品类的实例。 抽象工厂模式: 多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。 一个抽象工厂类,可以派生出多个具体工厂类。每个具体工厂类可以创建多个具体产品类的实例。 区别: 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。 3、JDK 中用到了哪些设计模式? 几乎每一种设计模式都被用到了 JDK 的源码中,下面列举一些常见的: 抽象工厂模式 javax.xml.parsers.DocumentBuilderFactory#newInstance() 2. javax.xml.transform.TransformerFactory#newInstance() 建造者模式 java.lang.StringBuilder#append() 2. java.lang.StringBuffer#append() 原型模式 1. java.lang.Object#clone() 适配器模式 java.util.Arrays

设计模式——结构型模式之组合模式(七)

血红的双手。 提交于 2019-12-04 14:31:13
组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。 个人理解: 1、组合模式,就是在一个对象中包含其他对象,这些被包含的对象可能是终点对象(不再包含别的对象),也有可能是非终点对象(其内部还包含其他对象,或叫组对象),我们将对象称为节点,即一个根节点包含许多子节点,这些子节点有的不再包含子节点,而有的仍然包含子节点,以此类推。 2、所谓组合模式,其实说的是对象包含对象的问题,通过组合的方式(在对象内部引用对象)来进行布局,我认为这种组合是区别于继承的,而另一层含义是指树形结构子节点的抽象(将叶子节点与数枝节点抽象为子节点),区别于普通的分别定义叶子节点与数枝节点的方式 介绍 意图: 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决: 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。

JAVA获取树形结构

廉价感情. 提交于 2019-12-03 22:52:17
package com.nnmzkj.common.dto;import lombok.Data;import java.io.Serializable;import java.util.ArrayList;import java.util.List;@Datapublic class TreeParamDto implements Serializable { private static final long serialVersionUID = -7692266106281926159L; private Long id; private String name; private Long parentId; private Long menuId; //冗余字段 private Integer isParent; private List<TreeParamDto> children ;} /////////////////package com.nnmzkj.common.utils;import com.nnmzkj.common.dto.BaseTreeGrid;import com.nnmzkj.common.dto.TreeParamDto;import com.nnmzkj.sys.model.SysMenuEntity;import com.nnmzkj

组合模式

我怕爱的太早我们不能终老 提交于 2019-12-03 13:24:38
组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。 这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。 我们通过下面的实例来演示组合模式的用法。实例演示了一个组织中员工的层次结构。 介绍 意图: 将对象组合成树形结构以表示"部分-整体"的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 主要解决: 它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。 何时使用: 1、您想表示对象的部分-整体层次结构(树形结构)。 2、您希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。 如何解决: 树枝和叶子实现统一接口,树枝内部组合该接口。 关键代码: 树枝内部组合该接口,并且含有内部属性 List,里面放 Component。 应用实例: 1、算术表达式包括操作数、操作符和另一个操作数,其中,另一个操作符也可以是操作数、操作符和另一个操作数。 2、在 JAVA AWT 和 SWING 中,对于 Button 和 Checkbox 是树叶,Container

将json数据处理为树形结构

删除回忆录丶 提交于 2019-12-03 04:51:10
假设我们现在有如下的json数据: 但我们想得到如下的树形结构: 我们可以这样来操作: function trans_tree(jsonData){ //temp为临时对象,将json数据按照id值排序. var result = [], temp = {}, len = jsonData.length for(var i = 0; i < len; i++){ // 以id作为索引存储元素,可以无需遍历直接快速定位元素 temp[jsonData[i]['id']] = jsonData[i] } for(var j = 0; j < len; j++){ var list = jsonData[j] // 临时变量里面的当前元素的父元素,即pid的值,与找对应id值 var sonlist = temp[list['pid']] // 如果存在父元素,即如果有pid属性 if (sonlist) { // 如果父元素没有children键 if (!sonlist['children']) { // 设上父元素的children键 sonlist['children'] = [] } // 给父元素加上当前元素作为子元素 sonlist['children'].push(list) } // 不存在父元素,意味着当前元素是一级元素 else { result.push(list

C#数据结构―树和二叉树

匿名 (未验证) 提交于 2019-12-03 00:34:01
 线性结构中的数据元素是一对一的关系,树形结构是一对多的非线性结构,非常类似于自然界中的树,数据元素之间既有分支关系,又有 层次关系。 树形结构在现实世界中广泛存在,如家族的家谱、一个单位的行政机构组织等都可以用树形结构来形象地表示。树形结构在计算机领域中也有着非常广泛的应用,如 Windows 操作系统中对磁盘文件的管理、编译程序中对源程序 的语法结构的表示等都采用树形结构。 在数据库系统中,树形结构也是数据的重要组织形式之一。树形结构有树和二叉树两种,树的操作实现比较复杂,但树可以转换为二叉树进行处理,所以,我们主要讨论二叉树。 一:树 1.1树的定义    树(Tree)是 n(n≥0)个相同类型的数据元素的有限集合。树中的数据元素叫结点(Node)。n=0 的树称为空树(Empty Tree);对于 n>0 的任意非空树 T 有:   (1)有且仅有一个特殊的结点称为树的根(Root)结点,根没有前驱结点;     (2)若n>1,则除根结点外,其余结点被分成了m(m>0)个互不相交的集合T 1 ,T 2 ,…,T m ,其中每一个集合T i (1≤i≤m)本身又是一棵树。树T 1 ,T 2 ,…,T m 称为这棵树的子树(Subtree)。    由树的定义可知,树的定义是递归的,用树来定义树。因此,树(以及二叉树)的许多算法都使用了 递归 。   树的形式定义为:树

组合模式

匿名 (未验证) 提交于 2019-12-03 00:30:01
组合模式(Composite Pattern)组合多个对象形成树形结构以表示具有“整体-部分”关系的层次结构。组合模式对单个对象(即:叶子构件)和组合对象(即:容器构件)的使用具有一致性,组合模式又被称为“整体-部分”(Part-Whole)模式,属于对象结构型模式。 透明组合模式 安全组合模式 透明组合模式包含以下特点: 在 Component 中定义了用于访问和管理子构建的接口,这样做的好处是确保所有的构件类都有相同的接口。 在 Client 看来,Leaf 与 Composite 所提供的接口一致,Client 可以相同地对待所有的对象。 安全组合模式包含以下特点: 在 Component 中不定义任何用于访问和管理子构建的接口,而在 Composite 中声明并实现。 这种做法是安全的,因为不需要向 Leaf 提供这些管理成员对象的接口,对于 Leaf 来说,Client 不可能调用到这些接口。 透明组合模式的缺点是不够安全,因为 Leaf 和 Composite 在本质上是有区别的。Leaf 不可能有下一个层级,因此为其提供 Add()、Remove()、GetChild() 等接口没有意义。这在编译阶段不会出错,但在运行阶段如果调用这些接口可能会出错(如果没有提供相应的异常处理)。 安全组合模式的缺点是不够透明,因为 Leaf 和 Composite 具有不同的接口,且