先序遍历

20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结

白昼怎懂夜的黑 提交于 2019-12-05 15:33:13
20182301 2019-2020-1 《数据结构与面向对象程序设计》第十周学习总结 教材学习内容总结 图的结构构成 顶点(vertex):图中的数据元素,如图一 边(edge):图中连接这些顶点的线,如图一 G=(V,E) 或者 G=(V(G),E(G)) 其中 V(G)表示图结构所有顶点的集合,顶点可以用不同的数字或者字母来表示。E(G)是图结构中所有边的集合,每条边由所连接的两个顶点来表示。 图结构中顶点集合V(G)不能为空,必须包含一个顶点,而图结构边集合可以为空,表示没有边。 图的基本概念 无向图 如果一个图结构中,所有的边都没有方向性,那么这种图便称为无向图。典型的无向图,如图二所示。由于无向图中的边没有方向性,这样我们在表示边的时候对两个顶点的顺序没有要求。例如顶点VI和顶点V5之间的边,可以表示为(V2, V6),也可以表示为(V6,V2)。 有向图 一个图结构中,边是有方向性的,那么这种图就称为有向图,如图三所示。由于图的边有方向性,我们在表示边的时候对两个顶点的顺序就有要求。我们采用尖括号表示有向边,例如<V2,V6>表示从顶点V2到顶点V6,而<V6,V2>表示顶点V6到顶点V2。 顶点的度 连接顶点的边的数量称为该顶点的度。顶点的度在有向图和无向图中具有不同的表示。对于无向图,一个顶点V的度比较简单,其是连接该顶点的边的数量,记为D(V)。

3.文件操作

爱⌒轻易说出口 提交于 2019-12-05 15:18:40
3.文件操作 让前端觉得如获神器的不是NodeJS能做网络编程,而是NodeJS能够操作文件。小至文件查找,大至代码编译,几乎没有一个前端工具不操作文件。换个角度讲,几乎也只需要一些数据处理逻辑,再加上一些文件操作,就能够编写出大多数前端工具。本章将介绍与之相关的NodeJS内置模块。 开门红 NodeJS提供了基本的文件操作API,但是像文件拷贝这种高级功能就没有提供,因此我们先拿文件拷贝程序练手。与 copy 命令类似,我们的程序需要能接受源文件路径与目标文件路径两个参数。 小文件拷贝 我们使用NodeJS内置的 fs 模块简单实现这个程序如下。 var fs = require('fs'); function copy(src, dst) { fs.writeFileSync(dst, fs.readFileSync(src)); } function main(argv) { copy(argv[0], argv[1]); } main(process.argv.slice(2)); 以上程序使用 fs.readFileSync 从源路径读取文件内容,并使用 fs.writeFileSync 将文件内容写入目标路径。 豆知识: process 是一个全局变量,可通过 process.argv 获得命令行参数。由于 argv[0] 固定等于NodeJS执行程序的绝对路径,

Hive SQL编译过程(转)

佐手、 提交于 2019-12-05 08:35:21
转自:https://www.cnblogs.com/zhzhang/p/5691997.html Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析。Hive的稳定性和性能对我们的数据分析非常关键。 在 几次升级Hive的过程中,我们遇到了一些大大小小的问题。通过向社区的咨询和自己的努力,在解决这些问题的同时我们对Hive将SQL编译为 MapReduce的过程有了比较深入的理解。对这一过程的理解不仅帮助我们解决了一些Hive的bug,也有利于我们优化Hive SQL,提升我们对Hive的掌控力,同时有能力去定制一些需要的功能。 1、MapReduce实现基本SQL操作的原理 详细讲解SQL编译为MapReduce之前,我们先来看看MapReduce框架实现SQL基本操作的原理 1.1 Join的实现原理 select u.name, o.orderid from order o join user u on o.uid = u.uid; 在map的输出value中为不同表的数据打上tag标记,在reduce阶段根据tag判断数据来源。MapReduce的过程如下(这里只是说明最基本的Join的实现,还有其他的实现方式) 1.2 Group

树的前世今生之数据结构遍历二叉搜索树平衡二叉树哈夫曼树哈夫曼编码堆的路径集合的并查按秩归并与路径压缩

百般思念 提交于 2019-12-05 02:11:11
正在更新~~~~ 在介绍树的概念之前,先来看一下树的四种遍历方式以此更直观了解树 void InorderTraversal( BinTree BT ) { if( BT ) { InorderTraversal( BT->Left ); /* 此处假设对BT结点的访问就是打印数据 */ printf("%d ", BT->Data); /* 假设数据为整型 */ InorderTraversal( BT->Right ); } }//中序遍历 void PreorderTraversal( BinTree BT ) { if( BT ) { printf("%d ", BT->Data ); PreorderTraversal( BT->Left ); PreorderTraversal( BT->Right ); } }//先序遍历 void PostorderTraversal( BinTree BT ) { if( BT ) { PostorderTraversal( BT->Left ); PostorderTraversal( BT->Right ); printf("%d ", BT->Data); } }//后序遍历 void LevelorderTraversal ( BinTree BT ) { Queue Q; BinTree T; if ( !BT )

20182333 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结

大城市里の小女人 提交于 2019-12-05 00:31:50
20182333 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结 教材学习内容总结 第十六章 树 树 1.树是非线性结构,其元素组织为一个层次结构 2.树的度表示树中的任意结点的最大子结点数 3.有m个元素的平衡n叉树的高度是lognm 4.树的遍历有4种方法 5.进行层序遍历时可采用队列来储存树中的元素 6.使用数组实现二叉树时,位于位置n的元素的左孩子在(2n+1)的位置,其右孩子在(2*(n+1))的位置 7.树的基于数组的存储链实现方式可以占数组中的连续位置,不管树是不是完全树 8.如何在一般二叉树中添加及删除元素,要取决于树的用途 9.使用决策树可以设计专家系统 二叉树 1.二叉查找树时一颗二叉树,对于其中的每个结点,左子树上的元素小于父结点的值,二右子树上的元素大于等于父结点的值 2.如果没有其他的操作,二叉查找树的树形由元素的添加次序来决定 3.最有效地二叉查找树时平衡的,所以每次比较时可以排除一半的元素 4.当从二叉查找树中删除元素时要考虑三种情形,其中的两种比较简单 5.当从二叉查找树中删除有两个子结点的结点时,比较好的办法是用它的中序后继来取代它 6.可以对二叉查找树进行旋转以恢复平衡 部分计算公式 1.二叉树上第i层上的结点数目最多为2^(i-1)(i>=1) 2.深度为k的二叉树至多有2^k-1个结点(i>=1) 3

【algo&ds】【吐血整理】4.树和二叉树、完全二叉树、满二叉树、二叉查找树、平衡二叉树、堆、哈夫曼树、B树、字典树、红黑树、跳表、散列表

前提是你 提交于 2019-12-04 20:51:38
本博客内容耗时4天整理,如果需要转载,请注明出处,谢谢。 1.树 1.1树的定义 在计算机科学中,树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个节点都只有有限个子节点或无子节点; 没有父节点的节点称为根节点; 每一个非根节点有且只有一个父节点; 除了根节点外,每个子节点可以分为多个不相交的子树; 树里面没有环路(cycle) 1.2常见术语 节点的度 :一个节点含有的 子树的个数 称为该节点的度; 树的度 :一棵树中,最大的节点度称为树的度; 叶节点 或 终端节点 :度为零的节点; 非终端节点 或 分支节点 :度不为零的节点; 父亲节点 或 父节点 :若一个节点含有子节点,则这个节点称为其子节点的父节点; 孩子节点 或 子节点 :一个节点含有的子树的根节点称为该节点的子节点; 兄弟节点 :具有相同父节点的节点互称为兄弟节点; 节点的 层次 :从根开始定义起,根为第1层,根的子节点为第2层,以此类推; 深度 :对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0; 高度 :对于任意节点n,n的高度为从n到一片树叶的最长路径长,所有树叶的高度为0;

Hive SQL 编译过程详解

﹥>﹥吖頭↗ 提交于 2019-12-04 17:22:46
Hive是基于Hadoop的一个数据仓库系统,在各大公司都有广泛的应用。美团数据仓库也是基于Hive搭建,每天执行近万次的Hive ETL计算流程,负责每天数百GB的数据存储和分析。Hive的稳定性和性能对我们的数据分析非常关键。 在几次升级Hive的过程中,我们遇到了一些大大小小的问题。通过向社区的咨询和自己的努力,在解决这些问题的同时我们对Hive将SQL编译为MapReduce的过程有了比较深入的理解。对这一过程的理解不仅帮助我们解决了一些Hive的bug,也有利于我们优化Hive SQL,提升我们对Hive的掌控力,同时有能力去定制一些需要的功能。 1、MapReduce实现基本SQL操作的原理 详细讲解SQL编译为MapReduce之前,我们先来看看MapReduce框架实现SQL基本操作的原理 1.1 Join的实现原理 select u.name, o.orderid from order o join user u on o.uid = u.uid; 在map的输出value中为不同表的数据打上tag标记,在reduce阶段根据tag判断数据来源。MapReduce的过程如下(这里只是说明最基本的Join的实现,还有其他的实现方式) 1.2 Group By的实现原理 select rank, isonline, count(*) from city group

二叉树遍历的递归实现(先序、中序、后序和层次遍历)

我的梦境 提交于 2019-12-04 09:35:41
由二叉树的定义可知,一棵二叉树由根结点、左子树和右子树三部分组成。因此,只要遍历了这三个部分,就可以实现遍历整个二叉树。若以D、L、R分别表示遍历根结点、左子树、右子树,则二叉树的递归遍历可以有一下三种方式: 先序遍历(DLR) 先序遍历的递归过程为 (1)访问根结点 (2)先序遍历根结点的左子树 (3)先序遍历根结点的右子树 举例: 代码: void PreOrder(BiTree bt) { if(bt ==NULL)return; //递归的结束条件----某结点为空时 printf("bt->data); //这里用printf data表示访问结点的数据域 PreOrder(bt->lchild); //递归遍历左孩子 PreOrder(bt->rclild); //递归遍历右孩子 } 中序遍历(LDR ) (1)中序遍历根结点的左子树 (2)访问根结点 (3)中序遍历根结点的右子树 举例: 代码: void PreOrder(BiTree bt) { if(bt ==NULL)return; //递归的结束条件----某结点为空时 PreOrder(bt->lchild); //递归遍历左孩子 printf("bt->data); //这里用printf data表示访问结点的数据域 PreOrder(bt->rclild); //递归遍历右孩子 } 后序遍历(LRD)

树和二叉树一篇就搞定!

[亡魂溺海] 提交于 2019-12-04 03:42:46
二叉树铺垫——树 前面几篇文章我们主要介绍的线性表,栈,队列,串,等等,都是一对一的 线性结构 ,而今天我们所讲解的 “树” 则是一种典型的 非线性结构 ,非线性结构的特点就是,任意一个结点的直接前驱,如果存在,则一定是唯一的,直接后继如果存在,则可以有多个,也可以理解为一对多的关系,下面我们就先来认识一下树 树的概念 下图我们日常生活中所见到的树,可以看到,从主树干出发,向上衍生出很多枝干,而每一根枝干,又衍生出一些枝丫,就这样组成了我们在地面上可以看到的树的结构,但对于每一个小枝丫来讲,归根结底,还是来自于主树干的层层衍生形成的。 我们往往需要在计算机中解决这样一些实际问题 例如: 用于保存和处理树状的数据,例如家谱,组织机构图 进行查找,以及一些大规模的数据索引方面 高效的对数据排序 先不提一些复杂的功能,就例如对于一些有树状层级结构的数据进行建模,解决实际问题,我们就可以利用 “树” 这种结构来进行表示,为了更符合我们的习惯,我们一般把 “树” 倒过来看,我们就可以将其归纳为下面这样的结构,这也就是我们数据结构中的 “ 树” 树中的常见术语 结点 :包含数据项以及指向其他结点的分支,例如上图中圆 A 中,既包含数据项 A 又指向 B 和 C 两个分支 特别的,因为 A 没有前驱,且有且只有一个,所以称其为根结点 子树 :由根结点以及根结点的所有后代导出的子图称为树的子树

PHP 高级面试115题汇总(含答案)

左心房为你撑大大i 提交于 2019-12-03 17:29:26
1、给你四个坐标点,判断它们能不能组成一个矩形,如判断 ([0,0],[0,1],[1,1],[1,0]) 能组成一个矩形。 勾股定理,矩形是对角线相等的四边形。只要任意三点不在一条直线上,任选一点,求这一点到另外三点的长度的平方,两个短的之和如果等于最长的,那么这就是矩形。 2、写一段代码判断单向链表中有没有形成环,如果形成环,请找出环的入口处,即 P 点 1 /* 2 *单链表的结点类 3 */ 4 class LNode{ 5 //为了简化访问单链表,结点中的数据项的访问权限都设为public 6 public int data; 7 public LNode next; 8 } 9 10 class LinkListUtli { 11 //当单链表中没有环时返回null,有环时返回环的入口结点 12 public static LNode searchEntranceNode(LNode L) 13 { 14 LNode slow=L;//p表示从头结点开始每次往后走一步的指针 15 LNode fast=L;//q表示从头结点开始每次往后走两步的指针 16 while(fast !=null && fast.next !=null) 17 { 18 if(slow==fast) break;//p与q相等,单链表有环 19 slow=slow.next; 20 fast