| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 'use strict'/** * Definition for binary tree with next pointer. * function TreeLinkNode(val) { *     this.val = val; *     this.left = this.right = this.next = null; * } */function TreeLinkNode(val) {    this.val = val    this.left = this.right = this.next = null}/** * @param {TreeLinkNode} root * @return {void} Do not return anything, modify tree in-place instead. */// var connect = function (root) {//     if (root === null) {//         return//     }//     let curr = root//     let prev = null//     let queue = []//     queue.push({//         node: curr,//         level: 1//     })//     while (queue.length !== 0) {//         let q = queue[0]//         queue = queue.slice(1)//         if (prev !== null && prev.level === q.level) {//             prev.node.next = q.node//         }//         prev = q//         if (q.node.left !== null) {//             queue.push({//                 node: q.node.left,//                 level: q.level + 1//             })//         }//         if (q.node.right !== null) {//             queue.push({//                 node: q.node.right,//                 level: q.level + 1//             })//         }//     }// }// It is a FULL BST, so we can use some tricky methodvar connect = function(root) {    if (root === null) return    connectHelper(root.left, root.right)    connectHelper(root.right, null)}function connectHelper(node, next) {    if (node === null) return    node.next = next    // NOTE: All values are truthy unless they are defined as falsy    // If next === null, && return false, false || null => null;    // else && return next.left, next.left || null => next.left    let nextRight = next && next.left || null    connectHelper(node.left, node.right)    connectHelper(node.right, nextRight)}function __main__() {    /*eslint no-console: ["error", { allow: ["log"] }] */    let logger = console.log.bind(console)    //       1    //      / \    //     2   3    //    /\   /\    //   4  5 6  7    let n7 = new TreeLinkNode(7)    let n6 = new TreeLinkNode(6)    let n5 = new TreeLinkNode(5)    let n4 = new TreeLinkNode(4)    let n3 = new TreeLinkNode(3)    n3.left = n6    n3.right = n7    let n2 = new TreeLinkNode(2)    n2.left = n4    n2.right = n5    let n1 = new TreeLinkNode(1)    n1.left = n2    n1.right = n3    connect(n1)    logger(n1.next)    logger(n2.next)    logger(n4.next)    logger(n5.next)}__main__()
 |