Given a binary tree
struct TreeLinkNode {
TreeLinkNode *left;
TreeLinkNode *right;
TreeLinkNode *next;
}
Populate each next pointer to point to its next right node. If there is no
next right node, the next pointer should be set to NULL
.
Initially, all next pointers are set to NULL
.
Note:
Example:
Given the following perfect binary tree,
1
/ \
2 3
/ \ / \
4 5 6 7
After calling your function, the tree should look like:
1 -> NULL
/ \
2 -> 3 -> NULL
/ \ / \
4->5->6->7 -> NULL
Recursive.
For every node
:
node.right
.
Right child: points to node.next.left
if
node.next
exists.
/**
this.val = val;
this.left = this.right = this.next = null;
} */
/**
Level order traversal.
/**
* Definition for binary tree with next pointer.
* 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) { return }
const queue = [NaN, root]
while (queue.length > 1) {
const node = queue.shift()
if (node !== node) {
for (let i = 0; i < queue.length; i++) {
queue[i].next = queue[i+1] || null
}
queue.push(NaN)
} else {
if (node.left !== null) { queue.push(node.left) }
if (node.right !== null) { queue.push(node.right) }
}
}
};
Template generated via Leetmark.