📅  最后修改于: 2023-12-03 15:27:23.596000             🧑  作者: Mango
在这篇文章中, 我将要介绍如何解决Hackerrank的第 23 天挑战题目: BST Level-Order Traversal.
这个问题的意思是让我们通过广度优先搜索的算法来遍历一颗二分搜索树, 并按层顺序输出每个节点的值. 我们需要实现一个函数, 它接收一个二分搜索树的根节点作为参数, 返回一个数组, 数组中的元素按层顺序输出每个节点的值, 即从根节点开始, 按照从上到下, 从左到右的顺序输出每个节点的值.
下面是这个函数具体实现的一些关键点:
首先, 我们需要创建一个队列来存储每个节点. 我们将根节点推入队列中.
接着, 我们需要一个 while 循环来遍历队列. 如果队列不为空, 则继续循环.
在循环中, 我们需要弹出当前队列中的第一个节点. 我们输出它的值.
如果当前节点有左子树, 则将其左子树推入队列中.
如果当前节点有右子树, 则将其右子树推入队列中.
重复 3 - 5 步, 直到队列为空.
下面是这个函数的实现代码片段:
function levelOrder(root) {
if (!root) {
return [];
}
const queue = [root];
const result = [];
while (queue.length) {
const current = queue.shift();
result.push(current.data);
if (current.left) {
queue.push(current.left);
}
if (current.right) {
queue.push(current.right);
}
}
return result;
}
在这个函数中, 我们首先判断了根节点是否为空. 如果为空, 则直接返回一个空数组.
接着, 我们创建了一个队列和一个结果数组. 我们将根节点推入队列中.
在 while 循环中, 我们弹出当前队列中的第一个节点, 并将其值推入结果数组中. 如果当前节点有左子树, 则将其左子树推入队列中. 如果当前节点有右子树, 则将其右子树推入队列中.
最后, 我们返回结果数组.
这就是这个函数的实现方法. 如果你有任何问题或者疑问, 可以在评论区留言, 我会尽快回复的.