二叉树遍历
前序遍历是先序遍历是先访问根结点,再左子树,再右子树
中序遍历是先访问左子树, 再根结点,再右子树,
后序是先访问左子树, 再右子树,再根结点。
遍历的方式是用递归的方式,但效率较低。
show函数放的地方不同,决定了是按照什么方法遍历
function preOrder(treeRoots){
if(!(treeRoots==null)){ 必要判断是否为空
show(treeRoots); 前序遍历
preOrder(treeRoots.firstElementChild);
preOrder(treeRoots.lastElementChild);
}
}
function inOrder(treeRoots){
if(!(treeRoots==null)){ 中序遍历
inOrder(treeRoots.firstElementChild);
show(treeRoots);
inOrder(treeRoots.lastElementChild);
}
}
function lastOrder(treeRoots){
if(!(treeRoots==null)){ 后序遍历
lastOrder(treeRoots.firstElementChild);
lastOrder(treeRoots.lastElementChild);
show(treeRoots);
}
}
function show(node){ 遍历时显示的函数
node.style.backgroundColor="#ffffff";
setTimeout(function(){
node.style.backgroundColor="#232323";
},timer+=200);
setTimeout(function(){
node.style.backgroundColor="#ffffff";
},timer+=200);
}
遍历中需要显示的元素通常用数组的方法来进行保存或进行二步操作,而用到数组遍历的方法也很多,此处一并总结。
数组中遍历的方法如下:
1、for方法:这个方法就不说了,for(;;){
}
2、forEach方法:
forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
注意: forEach() 对于空数组是不会执行回调函数的。
这个方法执行是没有返回值的,对原来数组也没有影响;
array.forEach(function(currentValue, index, arr), thisValue)
参数 | 描述 | ||||||||
---|---|---|---|---|---|---|---|---|---|
function(currentValue, index, arr) | 必需。 数组中每个元素需要调用的函数。 函数参数:
| ||||||||
thisValue | 可选。传递给函数的值一般用 "this" 值。 如果这个参数为空, "undefined" 会传递给 "this" 值 |
3、map方法:
ary.map(function (item,index,input)
只不过map有return值,返回的是一个改变后的新的数组。
两者的兼容方法写在一篇专门关于兼容的文字收集里面吧。
4、for in方法
var arr = new Array("first", "second", "third") for(var item in arr) { document.write(arr[item]+","); }
for in 会遍历到元素中的可枚举的属性和原型方法。method 和 name属性。
所以不适合遍历数组,适合遍历对象。
for in遍历的是索引(键值)
5、 for of:)
需要ES6的支持哦。
for(let value of arr) { }); for of是除了for以外遍历数组的一个好方法, 不会遍历原型方法和属性。 遍历的是元素值。
跳出循环:
- return:结束循环并中断函数执行;
- break:结束循环函数继续执行;
- continue :跳过本次循环;
- for 循环中的变量 i,由于 ES5并没有块级作用域的存在,它在循环结束以后仍然存在于内存中,所以建议使用函数自执行的方式来避免;
js中的定时器
1、setTimeout(function,time)
两个属性都必须,等待一定的time时间,就执行函数function。只执行一次,就停止定时器。如果需要重复执行,就要多次调用自身。
steInterval(function,time)
两个属性都必须,等待一定时间time后,多次重复调用function,等到执行结束定时器的方法才结束。
2、定时器的返回值。
var time1=Window.setTimeout var time2=window.setInterval 等等
每个定时器按顺序返回第几个定时器的数值。即使消除了一个定时器,其返回值还是不会清除, 排名还继续往后。
3、消除定时器。
window.clearInterval(timer1) 和 window.clearTimeout(timer1).
消除定时器两种方法并没有区别.
而且参数不仅为timer1 \ timer2 还能是 其返回值 1和2等.