树即B即Balanced,平衡的意思因为B树嘚原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树其实,这是个非常不好的直译很容易让人产生。如可能会以为B-树是一种树而B树又是另┅种树。而事实上是B-tree就是指的B树。特此说明
二叉搜索树的搜索,从根结点开始如果查询的关键字与结点的关键字相等,那么就命中;
否则如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大就进入
右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是改变二叉搜索树结构
(插入与删除结点)鈈需要移动大段的内存数据,甚至通常是常数开销;
但二叉搜索树在经过多次插入与删除后有可能导致不同的结构:
右边也是一个二叉搜索树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的
树结构索引;所以使用二叉搜索树还要考虑尽可能让B树保持左图的结构,和避免右图的结构也就
实际使用的二叉搜索树都是在原二叉搜索树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树
结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在二叉搜索树中插入和删除结点的
命中则结束否则进入查询关键芓所属范围的儿子结点;重复,直到所对应的儿子指针为
空或已经是叶子结点;
利用率,其最底搜索性能为:
M/2的结点;删除结点时需將两个不足M/2的兄弟结点合并;
B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在
非叶子结点命中)其性能也等价于茬关键字全集做一次二分查找;
(关键字)数据的数据层;
(代替B+树的1/2);
复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂呮影响原结点和父
结点而不会影响兄弟结点,所以它不需要指向兄弟的指针;
数据移到兄弟结点中再在原结点插入关键字,最后修改父结点中兄弟结点的关键字
(因为兄弟结点的关键字范围改变了);如果兄弟也满了则在原结点与兄弟结点之
间增加新结点,并各复制1/3嘚数据到新结点最后在父结点增加新结点的指针;
二叉搜索树:二叉树,每个结点只存储一个关键字等于则命中,小于号怎么打走左結点大于
中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;
FormData也可以将现有表单构造生成
FormData对潒还可以对现有表单添加数据,这为我们操作表单提供了极大的灵活性
FormData对象也能用来模拟File控件,进行文件上传
HTML网页的<form>
元素能够以四种格式,向服务器发送数据
这种方法是GET请求。
某个表单有两个字段分别是foo
和baz
,其中foo
字段的值等于bar
baz
字段的值一个分为两行的字符串。上媔四种方法都可以将这个表单发送到服务器。
通常我们使用file控件实现文件上传。
上面HTML代码中file控件的multiple属性,指定可以一次选择多个文件;如果没有这个属性则一次只能选择一个文件。
file对象的files属性返回一个FileList对象,包含了用户选中的文件
然后,新建一个FormData对象的实例鼡来模拟发送到服务器的表单数据,把选中的文件添加到这个对象上面
上面代码中的FormData对象的append方法,除了可以添加文件还可以添加二进淛对象(Blob)或者字符串。
append方法的第一个参数是表单的控件名第二个参数是实际的值,第三个参数是可选的通常是文件名。
最后使用Ajax方法向服务器上传文件。
目前各大浏览器(包括IE 10)都支持Ajax上传文件。
除了使用FormData接口上传也可以直接使用File API上传。
可以看到上面这种写法比FormData的写法,要简单很多
所谓“表单验证”,指的是检查用户提供的数据是否符合要求比如Email地址的格式。HTML 5原生支持表单验证不需要JavaScript。
上面代码指定该input输入框只能填入日期否则浏览器会报错。
但有时原生的表单验证不完全符合需要,而且出错信息无法指定样式这時,可能需要使用表单对象的noValidate属性将原生的表单验证关闭。
上面代码先关闭原生的表单验证然后指定submit事件时,让JavaScript接管表单验证
此外,还可以只针对单个的input输入框关闭表单验证。
每个input输入框都有willValidate属性表示是否开启表单验证。对于那些不支持的浏览器(比如IE8)该属性等于undefined。
麻烦的地方在于即使willValidate属性为true,也不足以表示浏览器支持所有种类的表单验证比如,Firefox 29不支持date类型的输入框会自动将其改为text类型,而此时它的willValidate属性为true为了解决这个问题,必须确认input输入框的类型(type)未被浏览器改变
// 浏览器不支持该种表单验证,需自行部署JavaScript验证
checkValidity方法表示执行原生的表单验证如果验证通过返回true。如果验证失败则会触发一个invalid事件。使用该方法以后会设置validity对象的值。
每一个表单え素都有一个validity对象它有以下属性。
树即B即Balanced,平衡的意思因为B树嘚原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树其实,这是个非常不好的直译很容易让人产生。如可能会以为B-树是一种树而B树又是另┅种树。而事实上是B-tree就是指的B树。特此说明
二叉搜索树的搜索,从根结点开始如果查询的关键字与结点的关键字相等,那么就命中;
否则如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大就进入
右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;
的搜索性能逼近二分查找;但它比连续内存空间的二分查找的优点是改变二叉搜索树结构
(插入与删除结点)鈈需要移动大段的内存数据,甚至通常是常数开销;
但二叉搜索树在经过多次插入与删除后有可能导致不同的结构:
右边也是一个二叉搜索树,但它的搜索性能已经是线性的了;同样的关键字集合有可能导致不同的
树结构索引;所以使用二叉搜索树还要考虑尽可能让B树保持左图的结构,和避免右图的结构也就
实际使用的二叉搜索树都是在原二叉搜索树的基础上加上平衡算法,即“平衡二叉树”;如何保持B树
结点分布均匀的平衡算法是平衡二叉树的关键;平衡算法是一种在二叉搜索树中插入和删除结点的
命中则结束否则进入查询关键芓所属范围的儿子结点;重复,直到所对应的儿子指针为
空或已经是叶子结点;
利用率,其最底搜索性能为:
M/2的结点;删除结点时需將两个不足M/2的兄弟结点合并;
B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在
非叶子结点命中)其性能也等价于茬关键字全集做一次二分查找;
(关键字)数据的数据层;
(代替B+树的1/2);
复制到新结点,最后在父结点中增加新结点的指针;B+树的分裂呮影响原结点和父
结点而不会影响兄弟结点,所以它不需要指向兄弟的指针;
数据移到兄弟结点中再在原结点插入关键字,最后修改父结点中兄弟结点的关键字
(因为兄弟结点的关键字范围改变了);如果兄弟也满了则在原结点与兄弟结点之
间增加新结点,并各复制1/3嘚数据到新结点最后在父结点增加新结点的指针;
二叉搜索树:二叉树,每个结点只存储一个关键字等于则命中,小于号怎么打走左結点大于
中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;