116. 填充每个节点的下一个右侧节点指针
题目链接
function initTree(valList) {
const treeNodeList = [];
const sum = valList.length;
valList.forEach((el, index) => {
if (!el) {
treeNodeList.push(null);
return;
}
const leftIndex = index*2+1 < sum ? index*2+1: null;
const rightIndex = index*2+2 < sum ? index*2+2 :null;
const newNode = new Node(el, leftIndex, rightIndex);
treeNodeList.push(newNode);
});
treeNodeList.forEach(node=>{
if(node && node.left) {
node.left = treeNodeList[node.left];
}
if(node && node.right){
node.right = treeNodeList[node.right];
}
});
return treeNodeList[0];
}
function validate() {
const input = [1,2,3,4,5,null,7];
const root = initTree(input);
console.log('root', root);
const result = connect(root);
console.log('result', result);
}
function Node(val, left, right, next) {
this.val = val === undefined ? null : val;
this.left = left === undefined ? null : left;
this.right = right === undefined ? null : right;
this.next = next === undefined ? null : next;
};
var connect = function(root) {
if(!root)return root;
const queue = [root];
while(queue.length) {
let curLevel = [];
const levelLen = queue.length;
for(let i=0;i<levelLen;i++) {
const curNode = queue.pop();
curLevel.push(curNode);
if(curNode.left)queue.unshift(curNode.left);
if(curNode.right)queue.unshift(curNode.right);
}
curLevel.forEach((node,index)=>{
if (index === levelLen-1) {
node.next = null;
} else {
node.next = curLevel[index+1];
}
})
}
return root;
};
validate();