https://leetcode-cn.com/problems/find-bottom-left-tree-value/

    1. /**
    2. * Definition for a binary tree node.
    3. * class TreeNode {
    4. * val: number
    5. * left: TreeNode | null
    6. * right: TreeNode | null
    7. * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
    8. * this.val = (val===undefined ? 0 : val)
    9. * this.left = (left===undefined ? null : left)
    10. * this.right = (right===undefined ? null : right)
    11. * }
    12. * }
    13. */
    14. function findBottomLeftValue(root: TreeNode | null): number {
    15. if (!root) return null;
    16. const queue = [root];
    17. let bottomLeft: TreeNode;
    18. while (queue.length) {
    19. bottomLeft = queue[0];
    20. const size = queue.length;
    21. for (let i = 0; i < size; i++) {
    22. const curNode = queue.shift();
    23. if (curNode.left) queue.push(curNode.left);
    24. if (curNode.right) queue.push(curNode.right);
    25. }
    26. }
    27. return bottomLeft.val;
    28. }

    实现一个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);
    }