遍历

二叉树的迭代遍历以及递归遍历

痴心易碎 提交于 2019-12-06 05:08:14
二叉树的前序遍历(递归版): public ArrayList<Integer> inOrder(TreeNode root ){ ArrayList<Integer> result = new ArrayList<Integer>(); if(root == null){ return result; } result.add(root.val); inOrder(root.left);+ inOrder(root.right); return result; } 二叉树的中序遍历(递归版): public ArrayList<Integer> inOrder(TreeNode root ){ ArrayList<Integer> result = new ArrayList<Integer>(); if(root == null){ return result; } inOrder(root.left); result.add(root.val); inOrder(root.right); return result; } 二叉树的后续遍历(递归版): public ArrayList<Integer> inOrder(TreeNode root ){ ArrayList<Integer> result = new ArrayList<Integer>(); if(root =

JavaScript reduce() 方法

↘锁芯ラ 提交于 2019-12-06 05:06:46
一、语法 arr.reduce(function(prev,cur,index,arr){ ... }, init); 其中, arr 表示原数组; prev 表示上一次调用回调时的返回值,或者初始值 init; cur 表示当前正在处理的数组元素; index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1; init 表示初始值。 看上去是不是感觉很复杂?没关系,只是看起来而已,其实常用的参数只有两个: prev 和 cur 。接下来我们跟着实例来看看具体用法吧~ 二、实例 先提供一个原始数组: var arr = [3,9,4,3,6,0,9]; 实现以下需求的方式有很多,其中就包含使用reduce()的求解方式,也算是实现起来比较简洁的一种吧。 1. 求数组项之和 var sum = arr.reduce(function (prev, cur) { return prev + cur; },0); 由于传入了初始值0,所以开始时prev的值为0,cur的值为数组第一项3,相加之后返回值为3作为下一轮回调的prev值,然后再继续与下一个数组项相加,以此类推,直至完成所有数组项的和并返回。 2. 求数组项最大值 var max = arr.reduce(function (prev, cur) { return Math.max(prev

C博客作业05--2019-指针

為{幸葍}努か 提交于 2019-12-06 04:43:31
0.展示PTA总分 1.本章学习总结 1.1 学习内容总结 指针做循环变量可将地址做为循环变量,从首地址递增到尾地址。 字符指针表示字符串只需要将指针指向字符串的首地址。 动态分配内存可减少内存的浪费,具体方法可用malloc和calloc函数实现,后者还可以自动为申请的内存赋初值0,需要注意使用函数后需要强制类型转换,如:p=(char )malloc(n sizeof(a))等。 指针数组中存放的是地址,数组名是二级指针。对字符串的存放可以用到指针数组。 二级指针是指向指针的指针,行指针也是一种二级指针。指针数组和二维数组属于二级指针。 指针函数的函数返回值是指针(地址)。 1.2 本章学习体会 指针较前几章内容更加难以理解,指针的使用也经常出现各种问题,编译运行时也会出现很多报错,对指针的使用时机也不好把握。 两周代码量:710行。 2.PTA实验作业 2.1查找子串 2.1.1 伪代码 int i = 0; int j; while (s[i] != '\0') //主串遍历 { j=1; if (s[i] == t[0])//主串遇到子串的首字符 { 主串和子串继续比对直到子串结束或者二者不相等 如果子串比对到结束符说明找到了,返回子串在主串的首地址 } i++; } 没找到则返回空指针 2.1.2 代码截图 2.1.3 总结本题的知识点 1.掌握主串和子串同时遍历比较

MySQL8.0 新特性 Hash Join

女生的网名这么多〃 提交于 2019-12-06 04:29:20
概述&背景 MySQL一直被人诟病没有实现HashJoin,最新发布的8.0.18已经带上了这个功能,令人欣喜。有时候在想,MySQL为什么一直不支持HashJoin呢?我想可能是因为MySQL多用于简单的OLTP场景,并且在互联网应用居多,需求没那么紧急。另一方面可能是因为以前完全靠社区,这种演进速度毕竟有限,Oracle收购MySQL后,MySQL的发版演进速度明显加快了很多。 HashJoin本身算法实现并不复杂,要说复杂,可能是优化器配套选择执行计划时,是否选择HashJoin,选择外表,内表可能更复杂一点。不管怎样现在已经有了HashJoin,优化器在选择Join算法时又多了一个选择。MySQL本着实用主义,相信这个功能增强也回应了一些质疑,有些功能不是没有能力做好,而是有它的优先级。 在8.0.18之前,MySQL只支持NestLoopJoin算法,最简单的就是Simple NestLoop Join,MySQL针对这个算法做了若干优化,实现了Block NestLoop Join,Index NestLoop Join和Batched Key Access等,有了这些优化,在一定程度上能缓解对HashJoin的迫切程度。下文会单独拿一个章节讲MySQL的这些Join优化,下面先讲HashJoin。 Hash Join算法 NestLoopJoin算法简单来说

对字典进行遍历dict.items()

我与影子孤独终老i 提交于 2019-12-06 03:07:07
menu_list=[{'id': 1, 'caption': '菜单1', 'parent_id': None}, {'id': 2, 'caption': '菜单2', 'parent_id': None}, {'id': 3, 'caption': '菜单3', 'parent_id': None}, {'id': 4, 'caption': '菜单1.1', 'parent_id': 1}, {'id': 5, 'caption': '菜单1.2', 'parent_id': 1}, {'id': 6, 'caption': '菜单1.1.1', 'parent_id': 4}, {'id': 7, 'caption': '菜单2.1', 'parent_id': 2}, {'id': 8, 'caption': '菜单2.2', 'parent_id': 2}, {'id': 9, 'caption': '菜单3.1', 'parent_id': 3}, {'id': 10, 'caption': '菜单3.1.1', 'parent_id': 9}, {'id': 11, 'caption': '菜单3.1.2', 'parent_id': 9}] menu_dict = {} #对列表进行遍历: for item in menu_list: menu_dict

有效使用Django的QuerySets

点点圈 提交于 2019-12-06 02:53:25
对象关系映射 (ORM) 使得与SQL数据库交互更为简单,不过也被认为效率不高,比原始的SQL要慢。   要有效的使用ORM,意味着需要多少要明白它是如何查询数据库的。本文我将重点介绍如何有效使用 Django ORM 系统访问中到大型的数据集。  Django的queryset是惰性的   Django的queryset对应于数据库的若干记录(row),通过可选的查询来过滤。例如,下面的代码会得到数据库中名字为‘Dave’的所有的人: 1 person_set = Person.objects. filter (first_name = "Dave" )   上面的代码并没有运行任何的数据库查询。你可以使用person_set,给它加上一些过滤条件,或者将它传给某个函数,这些操作都不会发送给数据库。这是对的,因为数据库查询是显著影响web应用性能的因素之一。   要真正从数据库获得数据,你需要遍历queryset: 1 2 for person in person_set: print (person.last_name)  Django的queryset是具有cache的   当你遍历queryset时,所有匹配的记录会从数据库获取,然后转换成Django的model。这被称为执行(evaluation)。这些model会保存在queryset内置的cache中

python中的dict

寵の児 提交于 2019-12-06 02:49:23
dict 字典,它是无序的,不可重复的,可变的存储键值对的容器类型 1.dict的定义 # 创建一个dict 直接创建赋值用`{}`括起来的键值对,key不能是列表 dic = {"name":"小明", "age":18,"sex", "男",("k1","k2"):"value"} # 使用 fromkeys()静态方法创建 # 创建字典 fromkeys() 传递两个参数 第一个key 第二个value key是可遍历的参数对象 value无论传递进来的是什么类型 会被当做一个整体 info = dict.fromkeys({"key1", "key2", "key3", "key4"}, "value") 2.获取dict中的元素 # 因为字典是无序的,所以不能根据索引和切片来获取 # 根据key来获取 当key不存在时 程序会报错 dic ={"name":"小明", "age":18,"sex", "男",("k1","k2"):"value"}name = dic["name"] # 使用字典中的方法 get()来获取,key不存在时不会报错,返回None,若自定义值则返回自定义的值 name = dic.get("name") # 返回None course = dic.get("course") # 返回 null course = dic.get("course

Java自学-集合框架 二叉树

跟風遠走 提交于 2019-12-06 01:55:16
Java集合框架 二叉树 示例 1 : 二叉树概念 二叉树由各种 节点 组成 二叉树特点: 每个节点都可以有 左 子节点, 右 子节点 每一个节点都有一个 值 package collection; public class Node { // 左子节点 public Node leftNode; // 右子节点 public Node rightNode; // 值 public Object value; } 示例 2 : 二叉树排序-插入数据 假设通过二叉树对如下10个随机数进行排序 67,7,30,73,10,0,78,81,10,74 排序的第一个步骤是把数据插入到该二叉树中 插入基本逻辑是, 小、相同的放左边,大的放右边 67 放在根节点 7 比 67小,放在67的左节点 30 比67 小,找到67的左节点7,30比7大,就放在7的右节点 73 比67大, 放在67的右节点 10 比 67小,找到67的左节点7,10比7大,找到7的右节点30,10比30小,放在30的左节点。 ... ... 10比67小,找到67的左节点7,10比7大,找到7的右节点30,10比30小,找到30的左节点10,10和10一样大,放在左边 package collection; public class Node { // 左子节点 public Node leftNode; //

bzoj4033

本小妞迷上赌 提交于 2019-12-06 01:05:34
传送门:https://www.vijos.org/d/newbzoj/p/590c98b5d3d8a13210993839 试题描述: 有一棵点数为N的树,树边有边权。给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的N-K个点染成白色。将所有点染色后,你会获得黑点两两之间的距离加上白点两两之间距离的和的收益。 问收益最大值是多少。 输入示例 5 2 1 2 3 1 5 1 2 3 1 2 4 2 输出示例 17 解题思路: 设dp[i][j]是以i为根的子树中j个节点被染黑时所得到的边的最大贡献,这里的贡献是全局的,有dp[u][0]=dp[u][1]=0(因为无边)。枚举每一个子树被染黑的个数,通过连接根节点和子树的边进行状态转移。 注意遍历要从高遍历到0,防止遍历覆盖造成答案变大 有 dp[u][y+i]=max(dp[u][y+i],dp[u][y]+dp[j][i]+w[p]*((ll)i*(k-i)+((ll)sum[j]-i)*(n-k-sum[j]+i)));//dp[u][y]表示其他已经枚举过的子树中有y个黑节点时的最大值 1 #include<iostream> 2 #include<cstring> 3 #define ll long long 4 using namespace std; 5 int n,k; 6 int

JS 数据结构-集合 创建集合 常用集合方法

喜你入骨 提交于 2019-12-06 00:55:27
集合   ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。   特性:唯一性=>不重复=>能够对数据进行去重操作。 注:集合去重,是全等匹配,===。 创建集合   Set 本身是一个构造函数,调用构造函数用来生成 Set 数据结构。          关键词  标识符 = new Set();   例    let    i   = new Set();      Set 函数可以接受一个数组(或类似数组的对象)作为参数,用来进行数据初始化。       let i = new Set([1, 2, 3, 4, 4]);  会得到  set{1, 2, 3, 4,} 注:如果初始化时给的值有重复的,会自动去除。   集合并没有字面量声明方式。 集合的属性   常用的属性就一个:size   返回 Set 实例的成员总数。   let s = new Set([1, 2, 3]);   console.log( s.size ); // 3 集合的方法   Set 实例的方法分为两大类:操作方法(用于数据操作)和遍历方法(用于遍历数据)。   操作方法:       add(value)    添加数据,并返回新的 Set 结构       delete(value)   删除数据,返回一个布尔值,表示是否删除成功       has