https://leetcode-cn.com/problems/find-bottom-left-tree-value/
/**
* Definition for a binary tree node.
* class TreeNode {
* val: number
* left: TreeNode | null
* right: TreeNode | null
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
* }
*/
function findBottomLeftValue(root: TreeNode | null): number {
if (!root) return null;
const queue = [root];
let bottomLeft: TreeNode;
while (queue.length) {
bottomLeft = queue[0];
const size = queue.length;
for (let i = 0; i < size; i++) {
const curNode = queue.shift();
if (curNode.left) queue.push(curNode.left);
if (curNode.right) queue.push(curNode.right);
}
}
return bottomLeft.val;
}
实现一个LazyMan,可以按照以下方式调用:
LazyMan(‘Hank’)
【输出】
Hi! This is Hank!
LazyMan(‘Hank’).sleep(10).eat(‘dinner’)
【输出】
Hi! This is Hank!
// 等待10秒..
Wake up after 10
Eat dinner~
LazyMan(‘Hank’).eat(‘dinner’).eat(‘supper’)
【输出】
Hi This is Hank!
Eat dinner~
Eat supper~
LazyMan(‘Hank’).eat(‘supper’).sleepFirst(5)
【输出】
// 等待5秒
Wake up after 5
Hi This is Hank!
Eat supper
class _LazyMan {
private queue: Function[];
constructor(name: string) {
const task = () => {
console.log(`Hi! This is ${name}`);
this.next();
}
this.queue = [task];
setTimeout(() => {
this.next();
});
}
private delay(time: number) {
setTimeout(() => {
console.log(`Wake up after ${time}`);
this.next();
}, time * 1000);
}
private next() {
const task = this.queue.shift();
task && task();
}
eat(str: string) {
this.queue.push(() => {
console.log(`Eat ${str}`);
});
return this;
}
sleep(time: number) {
this.queue.push(() => this.delay(time));
return this;
}
sleepFirst(time: number) {
this.queue.unshift(() => this.delay(time));
return this;
}
}
function LazyMan(name: string) {
return new _LazyMan(name);
}