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);
}
