|
@@ -1,3 +1,5 @@
|
|
|
+'use strict'
|
|
|
+
|
|
|
/**
|
|
|
* Definition for binary tree with next pointer.
|
|
|
* function TreeLinkNode(val) {
|
|
@@ -11,16 +13,88 @@ function TreeLinkNode(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__()
|