遍历

树状菜单递归循环遍历获取响应数据,可以顺便重定向

六月ゝ 毕业季﹏ 提交于 2020-01-03 21:25:05
//arr数据大致长这样arr=[ { a:1, childrenn:[ { a:1-1, childrenn:[ {a:1-2,}, {a:1-2-2,} ] }, ] }, { a:2, childrenn:[ { a:2-1, }, ] }, { a:3, },] //父节点遍历一次 拿chlidren去遍历子节点arr.forEach(rootNode=>{ let nodeModels = { path: rootNode.uri, name: rootNode.text, component: rootNode.cls, meta: rootNode.iconCls, children: [], redirect:rootNode.children.length>0?rootNode.children[0].uri:'' }; nodeModels.children.push(getChinld(rootNode.children)); menuArr.push(nodeModels);});// 遍历子级节点function getChinld(childNode) { let childArray = []; for(var i=0;i<childNode.length;i++){ let nodeModel = { path: childNode[i].uri,

力扣105——从前序与中序遍历序列构造二叉树

三世轮回 提交于 2020-01-02 11:21:23
原题 根据一棵树的前序遍历与中序遍历构造二叉树。 注意:你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 原题url:https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 解题 这道题目,主要就是在于大家对于二叉树这个数据结构的熟悉程度了,根据其前序遍历和中序遍历,推算出原本的二叉树。 我们想想,如果不是写代码,只是通过手写的话,我们是如何查找的,就用题目给出的例子: 根据前序遍历,第一个一定是根节点,那么 3 就是根节点。 从中序遍历中寻找 3,在它左边的,都是其左子树上的节点,在它右边的,都是其右子树上的节点。 因为中序遍历中,3 的左边只有9,那么 9 就是 3 的左子节点。 根据前序遍历 先根然后左子节点,然后再右子节点 的规律,3 、9 之后的 20 一定是 3 的右子节点。 20 在中序遍历中,其左右两边就是 15 和 7,因此15 和 7 就分别是它的左右子节点。 根据上面的分析,你就可以画出例子中的二叉树了。 那么我们寻找的顺序是,先从前序遍历的第一个节点开始

python中的enumerate使用

随声附和 提交于 2020-01-02 01:40:32
enumerate函数用于遍历序列中的元素以及它们的下标,多用于在for循环中得到计数,enumerate参数为可遍历的变量,如 字符串,列表等 一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写: for i in range (0,len(list)): print i ,list[i] 但是这种方法有些累赘,使用内置enumerrate函数会有更加直接,优美的做法,先看看enumerate的定义: def enumerate(collection): 'Generates an indexed series: (0,coll[0]), (1,coll[1]) ...' i = 0 it = iter(collection) while 1: yield (i, it.next()) i += 1 enumerate会将数组或列表组成一个索引序列。使我们再获取索引和索引内容的时候更加方便如下: for index,text in enumerate(list): print index ,text 这里,还有需要注意的地方,以下代码是错的: mylist = ["a","b","c","d"] [i,j for i,j in enumerate(mylist)] 应该是: mylist = ["a","b","c","d"] [(i,j) for i,j in

LeetCode算法题-Intersection of Two Linked Lists(Java实现)

半城伤御伤魂 提交于 2020-01-02 01:19:10
这是悦乐书的第 178 次更新,第 180 篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第37题(顺位题号是160)。编写程序以找到两个单链表交叉的节点。例如: 以下两个链表: A: a1→a2 ↘ c1→c2→c3 ↗ B:b1→b2→b3 链表A和链表B在c1处相交。 注意 : 如果两个链接列表根本没有交集,则返回null。 函数返回后,链接列表必须保留其原始结构。 可以假设整个链接结构中没有任何环。 代码最好在O(n)时间内运行,并且只使用O(1)内存。 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。 02 第一种解法 这两个单链表,也可以看做是两数组,找出其中重复元素开始位置的值,最直接的办法就是上两层循环,外层遍历链表A,内层循环遍历链表B,直到遇到相交的节点为止,否则返回空。 特殊情况:当两链表中有一个为空的话,直接返回空。 public ListNode getIntersectionNode(ListNode headA, ListNode headB) { if (headA == null || headB == null) { return null; } ListNode B = headB; while (headA != null) { while

【leetcode】147 Insertion Sort List

一世执手 提交于 2020-01-02 01:14:53
插入排序 题意 使用插入排序对一个单链表进行排序 思路 说实话,没思路。先看看数组的插入排序吧,也许能找到灵感: 数组插入排序 数组的插入排序,需要对数组进行两重遍历,第一次找到一个比前面数字小的一个数字,说明它需要被移动到前面去,所以再从当前节点开始从后往前遍历,将每一个比其大的数字都往后移一位,直到找到一个比它小的数字,然后插入在这个数字后面,代码如下: public static void insertSort(int[] array) { int len = array.length; if(len <= 1) return; //从第二位开始遍历,找到前一位比后一位大的数字,说明该数字需要被插入到前面去 for(int i=1;i<len;i++) { if(array[i-1] > array[i]) { //临时变量保存array[i] int temp = array[i]; int j=i; //从后往前把所有比temp大的数往后移一位 while (j>0 && array[j-1] > temp) { array[j] = array[j-1]; j--; } //把temp放在比temp小的数的后面 array[j] = temp; } } for(int i : array) System.out.printf("%d\t", i); } 链表插入排序

实验四 图的遍历和应用

喜夏-厌秋 提交于 2020-01-01 22:02:08
采用邻接矩阵(或邻接表)实现图的遍历 (1)定义邻接矩阵(或邻接表)的存储结构; (2)建立一个无向网G,如下图所示: (3)对G进行深度优先遍历,结出结果; (4)对G进行广度优先遍历,结出结果; # include <iostream> # include <stdio.h> # include <stdlib.h> # include <queue> using namespace std ; # define INFINITY (int)1e9 //最大值无穷 # define MAX_VERTEX_NUM 20 //最大顶点个数 //(1)定义邻接矩阵的存储结构; //由于示例只有权值,没有弧的其他信息,所以可以用int型矩阵表示 typedef enum { DG , DN , UDG , UDN } GraphKind ; //{有向图,有向网,无向图,无向网} typedef struct VNode { int vexs [ MAX_VERTEX_NUM ] ; //顶点向量 int arcs [ MAX_VERTEX_NUM ] [ MAX_VERTEX_NUM ] ; //邻接矩阵 int vexnum , arcnum ; //图的当前顶点数和弧数 GraphKind kind ; //图的种类标志 } MGraph ; int vis [ MAX

Java集合框架顶层接口collectiion接口

妖精的绣舞 提交于 2020-01-01 15:57:55
如何使用迭代器 通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。 一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或ListIterator接口。 迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了Iterator,以允许双向遍历列表和修改元素。 序号 迭代器方法描述 1 使用 Java Iterator 这里通过实例列出Iterator和listIterator接口提供的所有方法。 遍历 ArrayList 实例 import java.util.*; public class Test{ public static void main(String[] args) { List<String> list=new ArrayList<String>(); list.add("Hello"); list.add("World"); list.add("HAHAHAHA"); //第一种遍历方法使用foreach遍历List for (String str : list) { //也可以改写for(int i=0;i<list.size();i++)这种形式 System.out.println(str); } /

Java集合

六月ゝ 毕业季﹏ 提交于 2020-01-01 15:54:34
集合与数组 数组: (可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用。 集合: (只能存储对象,对象类型可以不一样)的长度可变(动态的数组),可在多数情况下使用。 集合的分类: 在java集合中,集合分了两个大的接口,分别为:Collection接口和Map接口。 Collection接口又分为:List接口和Set接口。分别由不同的子类来实现。 集合的方法: 我先创建一个ArrayList对象,用ArrayList来说明一下集合里面的基本方法: Collection coll = new ArrayList(); (1)、size()方法:返回集合中元素个数 System.out.println(coll.size()); (2)、add(Object obj):向集合中添加一个元素(注:现在我没有使用泛型,所以不同类型的数据都能添加到集合中) coll.add("AA"); coll.add(new Date()); coll.add(123); coll.add('B'); (3)、addAll(Collection coll):将形参coll中包含的所有元素添加到当前集合中 Collection coll1 = Arrays.asList(1,2,3); coll.addAll(coll1);

【Java基础】【15Colletion集合】

大兔子大兔子 提交于 2020-01-01 15:54:00
15.01_集合框架(对象数组的概述和使用) A:案例演示 需求:我有5个学生,请把这个5个学生的信息存储到数组中,并遍历数组,获取得到每一个学生信息。 Student[] arr = new Student[5]; //存储学生对象 arr[0] = new Student("张三", 23); arr[1] = new Student("李四", 24); arr[2] = new Student("王五", 25); arr[3] = new Student("赵六", 26); arr[4] = new Student("马哥", 20); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); } B:画图演示 把学生数组的案例画图讲解 数组和集合存储引用数据类型,存的都是地址值 15.02_集合框架(集合的由来及集合继承体系图) A:集合的由来 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给我们提供了集合类,能存储任意对象,长度是可以改变的,随着元素的增加而增加,随着元素的减少而减少 B:数组和集合的区别 区别1 : 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值 集合只能存储引用数据类型(对象

List遍历以及剔除指定数据

时光毁灭记忆、已成空白 提交于 2020-01-01 15:39:06
一.list三种遍历方式 1.for循环 List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); for(int i = 0;i < list.size(); i++){ System.out.println(list.get(i)); } 2.foreach循环 List<String> list = new ArrayList<String>(); list.add("A"); list.add("A"); list.add("C"); list.add("D"); for(String name : list){ System.out.println(name); } 3.迭代器循环 List<String> list = new ArrayList<String>(); list.add("A"); list.add("A"); list.add("C"); list.add("D"); Iterator<String> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } 二.遍历list并删除符合条件的数据   1