力扣面试150(63/150)
8.22 117. 填充每个节点的下一个右侧节点指针 II
给定一个二叉树:
struct Node {int val;Node *left;Node *right;Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL
。初始状态下,所有 next 指针都被设置为 NULL
。
我的思路:
BFS遍历,每一层都放入一个数组当中,除了最后一个,其他的都设置next
BFS遍历主要是栈,数组的api方法让我们可以使用数组作为栈,遍历每一层,连接两个相邻的节点
我的代码:
var connect = function(root) {// 给一个二叉树,补全每个的next指针,指向下一个右侧的节点if(!root) return null;//层次遍历,遍历到最后一个节点设next为null// 数组作为栈let q = [root];while(q.length){const temp = q;q = [];for(let i = 0 ; i < temp.length ; i++){const node = temp[i];if(i){// 连接两个相邻的节点temp[i - 1 ].next = node;}if(node.left){q.push(node.left);}if(node.right){q.push(node.right);}}}return root;
};
总结:这段代码通过层次遍历的方式连接二叉树每一层的节点。它使用一个队列来逐层处理节点,在每一层中,从左到右遍历节点,将每个节点的 next
指针指向其右侧相邻的节点。处理完当前层后,继续处理下一层,直到所有层都处理完毕。最终返回根节点,此时每个节点的 next
指针都已正确指向其右侧节点。