填充它的每个 next 指针,让这个指针指向其下一个右侧节点。
如果找不到下一个右侧节点,则将 next 指针设置为 NULL。
初始状态下,所有 next 指针都被设置为 NULL。
示例 1:
输入:root =[1,2,3,4,5,6,7]
输出:[1,#,2,3,#,4,5,6,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。
示例 2:
输入:root =[]
输出:[]
// 官方解法// 吐槽:前端做这种树的题就是容易脑容量小,今天虽然你把我打死了,可我就是不服。/**
* // Definition for a Node.
* 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;
* };
*//**
* @param {Node} root
* @return {Node}
*/varconnect=function(root){let queue =[root]if(!root){return root
}while(queue.length){let length = queue.length;for(let i =0; i < length; i ++){let node = queue.shift()// 连接if(i < length -1){
node.next = queue[0];}
node.left && queue.push(node.left)
node.right && queue.push(node.right)}}return root
};
// 捍卫尊严的解法 (leetcode没过啊)/**
* @param {Node} root
* @return {Node}
*/varconnect=function(root){let res =[]let queue =[root]if(!root){return[]}while(queue.length){let length = queue.length;for(let i =0; i < length; i++){let node = queue.shift()
res.push(node.val)
node.left && queue.push(node.left)
node.right && queue.push(node.right)}
res.push('#')}return res
};