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 method
- var 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__()
|