二叉搜索树

二叉查找树(英语:Binary Search Tree),也称为二叉搜索树、有序二叉树(ordered binary tree)或排序二叉树(sorted binary tree) 性质 指一棵空树或者具有下列性质的二叉树: 若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节点。 优势 二叉查找树相比于其他数据结构的优势在于查找、插入的时间复杂度较低。为O(logn) 。二叉查找树是基础性数据结构,用于构建更为抽象的数据结构,如集合、多重集、关联数组等。 二叉搜索树的查找算法 在二叉搜索树b中查找x的过程为: 若b是空树,则搜索失败,否则: 若x等于b的根节点的数据域之值,则查找成功;否则: 若x小于b的根节点的数据域之值,则搜索左子树;否则: 查找右子树。 在二叉搜索树插入节点的算法 向一个二叉搜索树b中插入一个节点s的算法,过程为: 若b是空树,则将s所指节点作为根节点插入,否则: 若s->data等于b的根节点的数据域之值,则返回,否则: 若s->data小于b的根节点的数据域之值,则把s所指节点插入到左子树中,否则: 把s所指节点插入到右子树中。(新插入节点总是叶子节点) ……

阅读全文

vue-lazyload插件

使用 1 2 3 npm install vue-lazyload --save 1 2 3 4 5 6 7 //注册插件 import vueLazyload from 'vue-lazyload' Vue.use(vueLazyload); 1 2 3 4 5 //在需要懒加载的图片上 <img v-lazy="imgUrl"> 参数说明 注册插件的时候,是可以传入第二个配置参数的 1 2 3 Vue.use(vueLazyload,{}) 可选的参数如下: preLoad:类型Number,默认1.3. 表示lazyload的元素距离页面底部距离的百分比.计算值为(preload - 1). attempt:图片加载失败后的重试次数.默认为3. error:类型string.图片加载失败后的显示的失败图片路径. loading:类型string.图片正在加载中显示的loading图片的路径. listenEvents:类型array.默认[‘scroll’, ‘wheel’, ‘mousewheel’, ‘resize’, ‘animationend’, ‘transitionend’, ‘touchmove’].即是在监听上述事件中,判断图片是否在preload的位置.如果你不想在那么多事件中判断,可以指定一个或者几个.例如如果你给这个属性只指定[‘touchmove’].那么scroll 屏幕不会加载图片,只有手指滑动屏幕才会加载图片. adapter:注册img 的loading,loaded,error三个状态的回调函数,参数会暴露懒加载的img元素,可以对其进行操作. filter: img未加载之前,解析到src 的时候注册的回调函数.可以在加载图片之前,对src进行修改.注册在filter下的所有的函数都会执行 lazyComponent:类型Boolean.是否启用懒加载组件.组件中的内容只有在出现在preload的位置中才会加载组件.这个lazyloadComponent 组件有个缺点就是,组件在加载前是什么都不渲染的,这样子的话,有可能会影响布局,以及加载前到加载后的切换不好,有点突兀和生硬.……

阅读全文

Python 同级目录import报错

在使用protobuf时,我们自己了各种Options的时候,在生成的python文件会在同级目录中引用,所以这个时候我们不能做到,加个__init__.py文件了事然后在文件里面写 import mudole.file这样的代码,因为我们自己无法控制 解决方法如下,在__init__文件中加入以下代码: 1 2 3 4 5 6 7 import sys import os sys.path.append(os.path.dirname('mudole_name/')) ……

阅读全文

flask返回自定义的Response

from json import dumps from flask import Response from flask_api import status from protocol.errors_pb2 import * class ErrorResponse(Response): def __init__(self, err_code, err_msg=''): result = dumps(dict(code=err_code, msg=err_msg)) Response.__init__(self, result, mimetype='application/json') class JSONResponse(Response): def __init__(self, data, msg=''): result = dumps(dict(data=data, code=Error_None, msg=msg)) Response.__init__(self, result, mimetype='application/json') class UnauthorizedResponse(Response): def __init__(self): data = dumps(dict(msg="need login", code=Error_NeedLogin, data=None)) Response.__init__(self, data, mimetype='application/json', status=status.HTTP_401_UNAUTHORIZED) 注意:一定要使用json.dumps来转换最后的结果……

阅读全文

Gin上传文件到MongoDB gridfs

上传图片 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 func imagePost(c *gin.……

阅读全文

Django上传图片

model 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from django.db import models class Picture(models.Model): path = models.ImageField(upload_to='share_pictures/') name = models.CharField(max_length = 50) class Meta: db_table = "picture" def __str__(self): return self.name forms 1 2 3 4 5 6 7 8 9 10 11 from django import forms class ImageForm(forms.……

阅读全文

当我们接到一个需求时,我们应该做一些什么呢?

沟通需求 不论是什么样的团队,按照道理来说一定会有一个和你对接的产品 沟通大致的轮廓,一般来说,产品不会把东西都会给你说清楚,因为很多人都是很被动的,喜欢一问一答的方式。 知道了一个需求的大致内容,现在应该去每一句话的去分享需求文档,然后发掘里面的细节,查看会不会影响到程序的实现,或者会影响到其他的功能,这些都是我们开发人员需要去注意的。 现在已经确认程序能够去实现这个需求,那么我们应该做什么呢?先分析我们需要如何去实现,并且应该多想想能不能有其他的实现方案,哪一个更好? 要保证一个功能完美的在线上运行,我们最需要的是测试,我们在开发前就应该我们应该测试的案例,一开始你可能写不出来,无所谓,等你慢慢成为老油条,你一眼就知道要做些啥,而且这个东西不要只停留在想想中,一定要记下来,在开发过程中你还会想到许许多多的测试案例,也都记下来,不要偷懒,偷懒的后果出现bug会导致你被好几个人怼,包括测试。 开发,有前面的测试案例的发散,在写代码的过程你会发现,你会注意很多问题,包括边界条件。 自主测试,其实一个功能,最了解他的除了产品,可能就是你自己了,你知道怎么实现的,你最应该知道怎么测试,而且,测试人员也会有打盹的时候,很多时候我自己测试过后给了测试,依然会有bug,也就是说,测试人员的测试案例依然还是在我写的测试案例中,在不断积累的下,你会发现你的一个小需求可能会测试很多个测试案例,这是一个好事,这样你的功能才会在线上健壮的跑下去。 ……

阅读全文

Python any() 函数

any() 函数用于判断给定的可迭代参数 iterable 是否全部为 False,则返回 False,如果有一个为 True,则返回 True。 元素除了是 0、空、FALSE 外都算 TRUE。 如果想要测试一个list中是否有一个是1可以使用any,例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 x, y, z = 0, 1, 0 if x == 1 or y == 1 or z == 1: print('passed') if 1 in (x, y, z): print('passed') # These only test for truthiness: if x or y or z: print('passed') if any((x, y, z)): print('passed') ……

阅读全文

Python如何合并两个字典

Python 3 1 2 3 4 5 6 7 x = {'a': 1, 'b': 2} y = {'b': 3, 'c': 4} z = {**x, **y} Python 2 1 2 3 z = dict(x, **y) Python中只能处理这种简单的合并,如果出现相同的key,Python会选择覆盖 ……

阅读全文