199.二叉树的右视图
题目
LeetCode 中等
题目
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
题解
方法:广度优先
BFS
队列
O(n) O(n)
ts
//BFS,每一层最后一个节点
function rightSideViewBFS(root: TreeNode | null): number[] {
if (!root) return []
const vals = []
const queue = [root]
while (queue.length) {
console.log(queue.map(i => i.val))
let len = queue.length
while (len) {
let node = queue.shift()
if (len === 1) vals.push(node.val)
if (node.left) queue.push(node.left)
if (node.right) queue.push(node.right)
len--
console.log(queue.map(i => 'while - ' + i.val))
}
console.log('当前输出 ---', vals)
}
return vals
}
const tree = new Tree([1, 2, 3, null, 5, null, 4])
console.log('🌰', rightSideViewBFS(tree.root))
方法:深度优先
DFS
递归
O(n) O(n)
ts
//DFS,根右左,每一层的第一个结点
function rightSideViewDFS(root: TreeNode | null): number[] {
if (!root) return []
let res = []
const dfs = (node: TreeNode, depth: number) => {
console.log('node:', node?.val, 'depth:', depth, res)
if (depth === res.length) {
res.push(node.val)
}
depth++
if (node.right) dfs(node.right, depth)
if (node.left) dfs(node.left, depth)
}
dfs(root, 0)
return res
}
console.log('🌰', rightSideViewDFS(tree.root))