//事件委托
window.onload = function(){
var oUl = document.getElementById("ul1");
oUl.onclick = function(ev){
var ev = ev || window.event;
var target = ev.target || ev.srcElement;
if(target.nodeName.toLowerCase() == 'li'){
alert(123);
alert(target.innerHTML);
}
}
}
//Promise
// 1請求
function getData1 () {
return new Promise(function (resolve, reject) {
setTimeout(() => {
console.log('1執(zhí)行了')
resolve('請求到模擬數(shù)據(jù)1111拉')
}, 2000)
})
}
// 2請求
function getData2 (params) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
console.log('2執(zhí)行了')
resolve('請求到模擬數(shù)據(jù)22222拉府树!params:' + params)
}, 1500)
})
}
function promiseDemo () {
getData1()
.then(res => {
return getData2(res)
})
.then(res => {
console.log(res)
})
}
promiseDemo()
// 1執(zhí)行了
// 2執(zhí)行了
// 請求到模擬數(shù)據(jù)22222拉!params:請求到模擬數(shù)據(jù)1111拉 用時 3500 ms
//async+await
async function asyncDemo () {
const r1 = await getData1()
const r2 = await getData2(r1)
console.log(r2)
}
// 1執(zhí)行了
// 2執(zhí)行了
// 請求到模擬數(shù)據(jù)22222拉料按!params:請求到模擬數(shù)據(jù)1111拉 用時 3500 ms
在計算機科學(xué)中奄侠,二叉樹(英語:Binary tree)是每個節(jié)點最多只有兩個分支(不存在分支度大于2的節(jié)點)的樹結(jié)構(gòu)。通常分支被稱作“左子樹”和“右子樹”载矿。二叉樹的分支具有左右次序垄潮,不能顛倒。
上面是來自維基百科的解釋闷盔。而每一個節(jié)點的值總大于左子樹的值弯洗,而小于右子樹的值的二叉樹就叫排序二叉樹。比如:那么該如何創(chuàng)建一棵排序二叉樹呢逢勾?
function Btree() {
// 節(jié)點對象
var Node = function(key) {
this.key = key;
this.right = null;
this.left = null;
};
// 初始化根節(jié)點
var root = null;
var insertnode = function(node, newnode) {
// 判斷插到左子樹中還是右子樹中
if(newnode.key < node.key) {
if(node.left === null) {
node.left = newnode;
} else {
insertnode(node.left, newnode);
}
} else {
if(node.right === null) {
node.right = newnode;
} else {
insertnode(node.right, newnode);
}
}
};
this.insert = function(key) {
var newNode = new Node(key);
// 判斷插入的是否是根節(jié)點
if(root === null) {
root = newNode;
} else {
insertnode(root, newNode);
}
};
}我們可以看到插入到二叉樹的過程就是排序的過程牡整,又如何把其輸(遍歷)出來呢。遍歷可分為:
前序遍歷
中序遍歷
后序遍歷我們先看中序遍歷是如何實現(xiàn)的敏沉,只需要在Btree中加入以下兩個方法
var zhongxu = function(node, callback) {
if(node !== null) {
zhongxu(node.left, callback);
callback(node.key);
zhongxu(node.right, callback);
}
};
this.zhongxubianli = function(callback) {
zhongxu(root, callback);
}而前序后序與中序的差別不過在于callback方法的先后果正,即
前序就是先輸出值再依次遍歷左右子樹
中序就是先遍歷左子樹再輸出值然后再遍歷右子樹
后序就是先遍歷左右子樹再輸出值
// 前序遍歷
var qianxu = function(node, callback) {
if(node !== null) {
callback(node.key);
zhongxu(node.left, callback);
zhongxu(node.right, callback);
}
};// 后序遍歷
var houxu = function(node, callback) {
if(node !== null) {
zhongxu(node.left, callback);
zhongxu(node.right, callback);
callback(node.key);
}
};測試
var nodes = [8,2,4,5,7,13,11,9,14];
var btree = new Btree();
nodes.forEach(function(key) {
btree.insert(key);
})
var callback = function(key) {
console.log(key);
};
btree.zhongxubianli(callback);結(jié)果就是:
以上就是js的排序二叉樹實現(xiàn)過程。
-
第一步:創(chuàng)建測試文件盟迟。
image -
第二步:創(chuàng)建數(shù)據(jù)文件秋泳,用測試文件發(fā)起請求測試數(shù)據(jù)。
image -
第三步:配置Charles攒菠,Proxy->Proxy Setting->HTTP Proxy->Port (配置端口號任意迫皱,不要于本機其他端口沖突)
image -
第四部:配置手機代理
image -
第五部:手機和電腦鏈接同一個wifi,在統(tǒng)一網(wǎng)段下辖众,啟動xampp服務(wù)器卓起,手機通過ip訪問測試文件,請求的數(shù)據(jù)就會被抓包工具charles拿到凹炸。
image