题目
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

解析
// 怎么递归找到每一层的最右节点?
// 从根节点开始,先遍历右子树的节点,再遍历左子树的节点
// 根节点 深度为0 右视图节点数为0 加入右视图
// 第一层最右节点 深度为1 右视图节点数为1 加入右视图
// ......
// 每一层的最右节点满足条件:所在层的深度 = 右视图节点数
答案
javascript
var rightSideView = function(root) {
const ans = [];
function dfs(node, depth) {
if (node === null) {
return;
}
if (depth === ans.length) { // 这个深度首次遇到
ans.push(node.val);
}
dfs(node.right, depth + 1); // 先递归右子树,保证首次遇到的一定是最右边的节点
dfs(node.left, depth + 1);
}
dfs(root, 0);
return ans;
};
// 作者:灵茶山艾府
// 链接:https://leetcode.cn/problems/binary-tree-right-side-view/solutions/2015061/ru-he-ling-huo-yun-yong-di-gui-lai-kan-s-r1nc/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析
时间复杂度:O(n),其中 n 是二叉树的节点个数。
空间复杂度:O(h),其中 h 是二叉树的高度。递归需要 O(h) 的栈空间。最坏情况下,二叉树退化成一条链,递归需要 O(n) 的栈空间。
作者:灵茶山艾府
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。