遍历

二叉树的基本操作

徘徊边缘 提交于 2020-01-27 01:33:19
数据结构(实验C语言版) 二叉树的基本操作 一、实验目的 掌握二叉树链表的结构和二叉树的建立过程 掌握用递归方法实现二叉树遍历的操作 二、实验环境 硬件环境要求: PC机(单机) 使用的软件名称、版本号以及模块: VS2010或Visual C++ 6.0或Win-TC等。 三、实验内容 编写一个程序,实现二叉树的先序遍历、中序遍历和后序遍历的各种递归算法。并以下图所示的二叉树b给出求解结果。 四、实验要求 1、用 VS2010 工具创建文件或程序,输入代码后,进行编译运行或在控制台 执行。 2、观看程序运行结果,并根据结果进行思考,对程序进行修改和总结。 源代码 #include < iostream > #define maxsize 50 using namespace std ; class node { private : char data ; node * lchild ; node * rchild ; public : void createnode ( node * & , char * ) ; //先序遍历 void fnode ( node * b ) { if ( b != NULL ) { cout << b - > data ; fnode ( b - > lchild ) ; fnode ( b - > rchild ) ; } } //中序遍历

OpenCV对图像遍历的高效方法

╄→尐↘猪︶ㄣ 提交于 2020-01-26 23:51:59
一、指针遍历 首先介绍几个Mat类型的属性,rows是Mat类型的行数,cols是列数,channels()是通道数,那么对于图像的每一行,都有cols*channels()个像素点,所以我们可以对所有行进行遍历,然后对于特定一行,遍历所有像素点,代码如下: int nl= image.rows; // 行数 // 每行的元素数量 int nc= image.cols * image.channels(); for (int j=0; j<nl; j++) { // 取得行 j 的地址 uchar* data= image.ptr<uchar>(j); for (int i=0; i<nc; i++) { // 处理每个像素 --------------------- data[i]= 0; // 像素处理结束 ---------------- } // 一行结束 } ptr也是一个模板属性,用来获取地址,而我们为什么要按行遍历而不直接从第一个元素位置直接遍历nl*nc个呢? 这是因为在彩色图像中,图像数据缓冲区的前 3 字节表示左上角像素的三个通道的值,接下来的 3字节表示第 1 行的第 2 个像素,以此类推(注意 OpenCV 默认的通道次序为 BGR)。一个宽 W高 H 的图像所需的内存块大小为 W×H×3 uchars。不过出于性能上的考虑

JQ——遍历(each遍历、数组遍历)、添加(append、appendTo)

 ̄綄美尐妖づ 提交于 2020-01-26 20:56:53
1、each实现遍历操作: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>each实现的遍历</title> <script type="text/javascript" src="../js/jquery-1.8.3.js" ></script> <script> $(function(){ $("button").click(function(){ $("li").each(function(){ alert($(this).text()) }); }); }); </script> </head> <body> <button>点击按键,each实现遍历操作</button> <ul> <li>2020</li> <li>新年好!</li> <li>武汉加油!</li> </ul> </body> </html> 2、遍历数组: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>数组遍历</title> <script type="text/javascript" src="../js/jquery-1.8.3.js" ></script> <script> $(function () { $.each([213,37,34,567

二叉树遍历

ε祈祈猫儿з 提交于 2020-01-26 19:46:46
二叉树遍历 1.前序(先序):根 左 右 ==>A BDFE CGHI 2.中序:左 根 右 ==>D B EF A GH C I 3.后序:左 右 根 ==>DEFB GHIC A 错误笔记 :后序和中序都是从 左 ,这个左就是 最左边 这个数,不能单纯记为左下角这个数,我把他记成左下角这个数刚刚就产生了疑惑,图片里面这个D和E到底怎么安排,如果记为 最左边 就毫无疑惑是D。 遍历完左子树之后到了B结点这里,然后是到左下角,而不是最左边 4.层序:从上到下,从左到右 这个遍历的顺序是理解起来最简单的,但是代码实现起来却是最难的(个人观点),反正理解起来一定错不了, 从上到下,从左到右 。 A BC DEF GHI 代码实现 建立一个结构体链表来存储。 struct node { struct node * l ; //left struct node * r ; //right int data ; } ; 先序遍历: void xian ( struct node * t ) { if ( t == NULL ) return ; printf ( "%d" , t -> data ) ; //先输出结点data xian ( t -> l ) ; //遍历左子树 xian ( t -> r ) ; //遍历右子树 } 中序遍历: void zhong ( struct

L2-011. 玩转二叉树

僤鯓⒐⒋嵵緔 提交于 2020-01-26 17:27:48
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。 输入格式: 输入第一行给出一个正整数N(<=30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。 输出格式: 在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。 输入样例: 7 1 2 3 4 5 6 7 4 1 3 2 6 5 7 输出样例: 4 6 1 7 5 3 2 当左右子树都存在时进行交换即可。代码: #include <iostream> #include <cstdio> #include <cstdlib> #include <stack> #include <queue> using namespace std; int z[30],q[30]; class Tree { public: int data; Tree *lchild; Tree *rchild; Tree() { lchild=NULL; rchild=NULL; } }*root; Tree *CreatNode() { Tree *root=new Tree(); return root; } Tree *RestoreTree(int q1

Python序列应用知识回顾

混江龙づ霸主 提交于 2020-01-26 15:51:07
Python序列应用 1.序列 序列是一块用于存放多个值的连续内存空间,并且按一定顺序排列。序列结构有列表、元组、集合、字典和字符串。Python对序列中列表、元组、字符串有索引、切片、相加和相乘操作,可以通过关键字in检查某个元素是否为序列的成员。 (1)索引 序列中的每个元素都有一个编号被称为索引,通过索引可以访问序列中的任何元素。索引类似C语言数组中的下标从0开始表示第一个元素,依次递增,但 索引可以为负数 ,例如:-1表示最后一个元素。 (2)切片 切片是访问序列中元素的一种方法,可以访问一定范围内的元素。通过切片可以生成一个新的序列。格式如下: name[start:end:step] ''' name:表示序列的名称 start:表示切片开始的位置 end:表示切片的截止位置 step:表示切片的步长 ''' 通过切片可以截取序列上任意一处的信息,比如一个字符串可以通过切片生成另外一个字符串;一个列表可以通过切片,输出指定位置的元素。可以说是很方便的功能。 (3)相加和相乘 Python中,多个相同类型的序列可以相加成一个新序列。一个序列可以乘以一个数字n,也会生成一个重复这个序列元素n次的新序列。 2.列表 Python中的列表是由一系列特定顺序排列的元素组成的,是可变序列。列表元素可以是整数、实数、字符串、列表、元组等。创建列表格式: \\name =

面试-Java集合类

こ雲淡風輕ζ 提交于 2020-01-26 07:27:05
1.Java 容器分为 Collection 和 Map 两大类 Collection List(有顺序的collection,并且可以重复) ArrayList , LinkedList, Vector , Stack Set(不包含重复元素的collection) HashSet,LinkedHashSet,TreeSet Map(一组键和值映射的组合,键不能重复) · HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap,Hashtable 2.ArrayList与 LinkedList 1) ArrayList是基于动态数组的数据结构,内存存放地址连续,查询效率比较高,但插入和删除效率比较低。 2) LinkedList是基于链表的数据结构,不需开辟连续的内存空间,插入和删除操作效率比较高,但是查询效率比较低。 适用场景 : 当需要对数据进行多次访问则选择ArrayList,如果需要对数据进行多次增删改选择LinkedList。 3. ArrayList与 Vector 1) vector方法都是同步,线程安全,而ArrayList不是,因此性能比较好。 2) verctor当元素超过初始化的大小时,会自动将容量翻倍,而ArrayList只能50%,更有利于节约空间。 3) vector可设置增长因子。 适用场景 :

排序算法——插入排序

自作多情 提交于 2020-01-26 06:09:12
插入排序 拥有一个无序的数组,我们只需先拿一个数(一般拿第一个),把它先当作一个有序的数组。然后把这个无序数组中其它数分别插入到已经有序的数组中即可。 代码构造思路 :首先得考虑要用什么数据结构,是链表还是顺序表。在下面的代码中,我使用的是顺序表,其实就是普通的数组。然后因为我拿第一个数做为已经有序的数组,剩下只需要把其它在无序数组中的数,插入到有序数组中即可,所以外循环其实只需要循环 n-1 次。而每次循环的 nums[i] 其实就是代rug表当前要插入的数,然后构造内循环,内循环所循环的其实就是已经有序的数组,从尾到头进行遍历,至于为什么是从尾到头,当然是因为在顺序表中执行插入操作,不管插入到哪里,插入位置后面的数组自然都需要往后移一个位置,而在插入排序中,从尾到头的遍历的时候,在比较的同时,也在移动数组中数的位置。就是需要插入的数需要排在当前遍历到的有序数组的数的前面,自然需要把这个数后移,而因为是从尾到头的遍历,所以每一次的比较的位置不是正确的位置,都会把当前有序数组的数往后一位,直到找到合适的位置,进行插入。而这个合适的位置就是 nums[j + 1] = insertNum 。 时间复杂度 : 平均情况 最好情况 最坏情况 O ( N 2 ) O(N^2) O ( N 2 ) O ( N ) O(N) O ( N ) O ( N 2 ) O(N^2) O ( N 2 )

结对作业1

不羁的心 提交于 2020-01-26 03:56:03
1.代码地址: github 2.代码审查检查表 功能模块名称 二叉树的基本操作 审查人 罗园龙 审查日期 2019.4.24 代码名称 BalanceTree 代码作者 李康康 重要性 激活 级别 检查项 总计 命名 重要 Y 20 命名规则是否与所采用的规范保持一致? Y 20 是否遵循了最小长度最多信息原则? 重要 50 has/can/is前缀的函数是否返回布尔型? 注释 重要 Y 10 注释是否较清晰且必要? 重要 N 10 复杂的分支流程是否已经被注释? N 10 距离较远的}是否已经被注释? N 10 非通用变量是否全部被注释? 重要 Y 50 函数是否已经有文档注释?(功能、输入、返回及其他可选) 10 特殊用法是否被注释? 声明,空白,缩进 Y 20 每行是否只声明了一个变量?(特别是那些可能出错的类型) 重要 Y 40 变量是否已经在定义的同时初始化? 重要 Y 40 类属性是否都执行了初始化? Y 20 代码段落是否被合适地以空行分隔? Y 20 是否合理地使用了空格使程序更清晰? Y 20 代码行长度是否在要求之内? Y 20 折行是否恰当? 语句/功能分布/规模 Y 20 包含复合语句的{}是否成对出现并符合规范? Y 20 是否给单个的循环、条件语句也加了{}? Y 40 if/if-else/if-else if-else/do-while

对比分析HashMap、LinkedHashMap、TreeMap

杀马特。学长 韩版系。学妹 提交于 2020-01-26 01:05:23
前面花了4章对HashMap、LinkedHashMap以及TreeMap的原理实现进行了讲解,本章对它们进行简单的对比分析。 这里简单提一下,为什么前面没有单独一章来讲HashTable,HashTable是基于陈旧的Dictionary来实现的,效率上比起HashMap差很多,同时其唯一的优势“线程安全”的实现机制效率也是非常差的,现在一般都用ConcurrentHashMap,所以这个类基本上已经算是废弃了。 下面通过一个表格从各方面对比分析HashMap、LinkedHashMap、TreeMap HashMap LinkedHashMap TreeMap 原理 HashMap扩容机制及存取原理 LinkedHashMap如何保证顺序性 TreeMap原理实现及常用方法 线程安全 否 否 否 初始容量 16 16 0 存储结构 数组+链表/红黑树 数组+链表/红黑树,HashMap子类 红黑树 顺序规则 取值无顺序 取值按插入的顺序/按修改的顺序,根据accessOrder控制 插入时按key的自然顺序或者自定义顺序 存储特点 最多一条记录的key为null,可以多条记录value为null 最多一条记录的key为null,可以多条记录value为null 当为key的自然顺序存储时key不能为null,当自定义顺序时,通过传入的Comparator的实现控制 插入效率 高