遍历

树结构

社会主义新天地 提交于 2019-12-02 06:37:00
树 树是一种常见的数据结构,逻辑:除根节点之外每个节点只有一个父节点,根节点没有父节点。除叶节点之外所有节点都有一个或多个子节点,子节点没有子节点,叶节点没有子节点, 什么是二叉树 二叉树中每个节点最多智能有两个子节点。在二叉树中最重要的操作莫过于遍历,即按照某种遍历方式顺序访问树中所有节点通常有三种遍历方式 树的三种遍历方式: 前序遍历: 先访问根节点,在访问左子节点,最后访问右子节点。如图顺序为:10,6,4,8,14,12,16 中序遍历: 先访问左子节点,再访问根节点,最后访问右节点。如图顺序为:4,6,8,10,12,14+,16 后序遍历: 先访问左子节点,再访问右子节点,最后访问根节点。如图顺序为:4,8,6,12,16,14,10 来源: https://www.cnblogs.com/luyi84895838/p/11734840.html

数据结构实验之二叉树八:(中序后序)求二叉树的深度

喜夏-厌秋 提交于 2019-12-02 06:32:24
数据结构实验之二叉树八:(中序后序)求二叉树的深度 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。 Input 输入数据有多组,输入T,代表有T组数据。每组数据包括两个长度小于50的字符串,第一个字符串表示二叉树的中序遍历,第二个表示二叉树的后序遍历。 Output 输出二叉树的深度。 Sample Input 2 dbgeafc dgebfca lnixu linux Sample Output 4 3 Hint Source 重点:中序后序建立二叉树 # include <stdio.h> # include <stdlib.h> # include <string.h> char a [ 51 ] , b [ 51 ] ; int n ; struct node { char data ; struct node * lc ; struct node * rc ; } ; struct node * creat ( char a [ ] , char b [ ] , int n ) { struct node * root ; int i ; if ( n == 0 ) return NULL ; else { root = (

第6章 字典

这一生的挚爱 提交于 2019-12-02 06:08:43
看了这么久的视频和书,第一次超过第五章,开始新的章程 6.1 一个简单的字典 差了好多概念,没有一个概念是以客观事实来描述字典的实体概念。我的理解相当于是一个容器,里面可以存放好多与容器相关的东西。 6.2 使用字典 在Python中,字典是一些列键-值对。每一个键都与一个值关联,你可以使用键访问与之关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上可以将任何Python中对象用作字典的值。 字典用放在花括号{}中的一系列键-值对表示。 键-值对是两个相关联的值。指定键时,,Python将返回与之关联的值。 键和值之间用冒号分割,而键值对之间用逗号分割 最简单的字典只有一个键值对 6.2.1 访问字典中的值 要获得与键相对应的值,课一次制定自点名u放在方括号内的键。 字典中可以包含任意数值的键值对 6.2.2 添加键值对 字典是一种动态结构,可随时在其中添加键值对。要添加键值对,可依次指定字典名、用方括号括起来的键和相关联的值。 6.2.3 先创建一个空字典 在空字典中添加键值对。在空的花括号定义一个字典,再分行添加各个键值对。 使用字典来存储用户提供的数据或在编写能自动生成大量键值对的代码时,通常都需要先定义一个空字典 6.2.4 修改字典中的值 6.2.5 删除键值对 对于字典中不再需要的信息,可以使用del语句将相应的键值对彻底删除。使用del语句时

python 第三次作业

帅比萌擦擦* 提交于 2019-12-02 05:49:23
1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的《Python网络爬虫与信息提取》MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业 4.提供图片或网站显示的学习进度,证明学习的过程。 5.写一篇不少于1000字的学习笔记,谈一下学习的体会和收获。 requests库: requests.requests()构造一个请求,支撑一下各方法的基础方法 requests.get()获取HTML网页的主要方法,对应于HTTP的GET requests.head()获取HRML网页头信息的方法,对应于HTTP的head requests.post()向HTML网页提交POST请求的方法,对应于HTTP的POST requests.put()向HTML网页提交PUT请求的方法,对应于HTTP的PUT requests.patch()向HTML网页提交局部修改请求,对应于HTTP的PATCH requests.delete()向HTML页面提交删除请求,对应于HTTP的DELETE requests.requests(method,url,**kwargs) method:请求方式,对应get/put/post等7种 例:r = requests.requests('GET',url,**kwargs) url:拟获取页面的url链接 **kwargs:控制访问的参数

java遍历map的四种方式

只愿长相守 提交于 2019-12-02 05:38:38
public static void main(String[] args) { // 遍历Map的4中方法 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); map.put(1, 2); // 1. entrySet遍历,键和值都需要时使用(最常用) for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue()); } // 2. 通过keySet或values来实现遍历,性能略低于第一种方式 // 遍历map中的键 -- keySet for (Integer key : map.keySet()) { System.out.println("key = " + key); } // 遍历map中的值 -- values for (Integer value : map.values()) { System.out.println("key = " + value); } // 3. 使用Iterator遍历(不常用) Iterator<Map.Entry<Integer, Integer>>

Python链表操作(实现)

爷,独闯天下 提交于 2019-12-02 05:15:01
Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题。链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一。在本文中,我将针对链表本身的数据结构特点,以及链表的一些常见操作给大家做一个深入浅出的讲解,希望本文的读者能够掌握链表的操作。 1. 什么是链表? 简单地说,链表是一种无序的列表。你可以把链表里面的数据看成是随机排列的,元素之间并没有固定的先后顺序。所以,既然是无序的,那么我们就无法像操作list对象一样简单地用index来去定位和操作里面的元素,如下图所示: 图1 那么针对这种情况,我们怎么才能找到里面的各个元素呢? 其实,在链表里面的每个元素其实是一种叫Node的节点对象,每个Node会保存两个信息,一个是这个节点的值value,另一个是这个节点对应的下一个节点的引用next。这样,节点与节点之间其实就形成了一种链式结构,就像一根铁链一样,一环扣一环,这也是链表这个名字的由来。有了这样的链式结构,只要给我们一个起点,我们就能沿着起点一个节点一个节点地找到所有的节点,这就是链表整个数据结构的核心。 2. 如何实现链表? 前面已经讲过,链表结构的关键是Node节点对象,所以要实现链表之前,我们需要先定义Node节点对象。每个节点中保存着当前节点的数据value,以及当前节点的下一个节点的引用next

Python面试常考点之深入浅出链表操作

ぐ巨炮叔叔 提交于 2019-12-02 05:14:02
Python面试常考点之深入浅出链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题。链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一。在本文中,我将针对链表本身的数据结构特点,以及链表的一些常见操作给大家做一个深入浅出的讲解,希望本文的读者能够掌握链表的操作。 1. 什么是链表? 简单地说,链表是一种无序的列表。你可以把链表里面的数据看成是随机排列的,元素之间并没有固定的先后顺序。所以,既然是无序的,那么我们就无法像操作list对象一样简单地用index来去定位和操作里面的元素,如下图所示: 图1 那么针对这种情况,我们怎么才能找到里面的各个元素呢? 其实,在链表里面的每个元素其实是一种叫Node的节点对象,每个Node会保存两个信息,一个是这个节点的值value,另一个是这个节点对应的下一个节点的引用next。这样,节点与节点之间其实就形成了一种链式结构,就像一根铁链一样,一环扣一环,这也是链表这个名字的由来。有了这样的链式结构,只要给我们一个起点,我们就能沿着起点一个节点一个节点地找到所有的节点,这就是链表整个数据结构的核心。 2. 如何实现链表? 前面已经讲过,链表结构的关键是Node节点对象,所以要实现链表之前,我们需要先定义Node节点对象。每个节点中保存着当前节点的数据value,以及当前节点的下一个节点的引用next

Map集合的遍历

∥☆過路亽.° 提交于 2019-12-02 05:03:10
一,JDK8以前版本,使用entrySet()遍历Map类集合,只是遍历了一次就把key和value都放到了entry中,效率更高。 而不是用keySet()方式进行遍历,keySet()其实是遍历了两次,一次是转为Iterator对象,另一次是从hashfMap中取出key对应的value。 Map<String, String> map = new HashMap<>(); map.put("1", "111"); map.put("2", "222"); map.put("3", "333"); Set<Entry<String, String>> entrySet = map.entrySet(); for(Entry<String, String> entry:entrySet) { System.out.println(entry.getKey()+","+entry.getValue()); } 二,JDK8版本,使用forEach()遍历 //遍历Map集合 Map<String, String> map = new HashMap<>(); map.put("1", "111"); map.put("2", "222"); map.put("3", "333"); map.forEach((key,value)->{ System.out.println(key+

[转载]目录遍历攻击解析

拟墨画扇 提交于 2019-12-02 04:59:00
文章来源: https://cloud.tencent.com/developer/news/60212 一.漏洞描述 目录遍历是由于web服务器或者web应用程序对用户输入的文件名称的安全性验证不足而导致的一种安全漏洞,使得攻击者通过利用一些特殊字符就可以绕过服务器的安全限制,访问任意的文件(可以是web根目录以外的文件),甚至执行系统命令。 二.漏洞成因 程序在实现上没有充分过滤用户输入的../之类的目录跳转符,导致恶意用户可以通过提交目录跳转来遍历服务器上的任意文件。 三.漏洞利用 常见目录遍历: 0x01 Unix目录遍历攻击 通用的类Unix系统的目录遍历攻击字符串形如“../”。 0x02 Windows操作系统目录遍历攻击 对于微软的Windows操作系统以及DOS系统的目录结构,攻击者可以使用“../”或者“..”字符串。 在这种操作系统中,每个磁盘分区有一个独立的根目录(比如我们会把个人电脑分区成“C盘”、“D盘”等等),并且在所有磁盘分区之上没有更高级的根目录。这意味着Windows系统上的目录遍历攻击会被隔离在单个磁盘分区之内(C盘被攻击,D盘不受影响)。 0x03 URI编码形式的目录遍历攻击 一些网络应用会通过查询危险的字符串,例如:- ..- ..- ../ 来防止目录遍历攻击。然而,服务器检查的字符串往往会被URI编码

【Java基础】谈谈集合.CopyOnWriteArrayList

﹥>﹥吖頭↗ 提交于 2019-12-02 04:47:07
目录 实现原理 遍历时不用加锁的原因 CopyOnWriteArrayLis的缺点 使用场景 总结 参考 本篇博客介绍CopyOnWriteArrayList类,读完本博客你将会了解: 什么是COW机制; CopyOnWriteArrayList的实现原理; CopyOnWriteArrayList的使用场景。 经过之前的博客介绍,我们知道ArrayList是线程不安全的。要实现线程安全的List,我们可以使用 Vector ,或者使用Collections工具类将List包装成一个 SynchronizedList 。其实在Java并发包中还有一个CopyOnWriteArrayList可以实现线程安全的List。 在开始之前先贴一段概念 如果有多个调用者(callers)同时请求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。优点是如果调用者没有修改该资源,就不会有副本(private copy)被建立,因此多个调用者只是读取操作时可以共享同一份资源。 实现原理 Vector这个类是一个非常古老的类了,在JDK1.0的时候便已经存在,其实现安全的手段非常