题目:199. 二叉树的右视图
解法一
深度遍历:按照 根结点 -> 右子树 -> 左子树 的顺序访问,就可以保证每层都是最先访问最右边的节点的。
function rightSideView(root) {
const list = [];
const dfs = (node, level) => {
if (!node) return;
if (list.length === level) {
list.push(node.val);
}
level++;
dfs(node.right, level);
dfs(node.left, level);
};
dfs(root, 0);
return list;
}
解法二
广度遍历:利用 BFS 进行层次遍历,记录下每层的最后一个元素
function rightSideView(root) {
if (!root) return [];
const queue = [root];
const list = [];
while (queue.length) {
const size = queue.length;
for (let i = 0; i < size; i++) {
const node = queue.shift();
if (node.left) {
queue.push(node.left);
}
if (node.right) {
queue.push(node.right);
}
// 记录当前层的最后一个元素
if (i == size - 1) {
list.push(node.val);
}
}
}
return list;
}