题目
- 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
![]()
python
题解:BFS
- 用BFS,每一层最后一个弹出队列的元素加到结果列表里面
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
if not root:# 如果根节点为空,直接返回空列表
return []
res=[] # 存储结果的列表
q=[] # 使用列表作为队列
q.append(root)# 将根节点加入队列
res.append(root.val)# 将根节点的值加入结果列表
#step=1# 记录当前层的编号
while q:
size=len(q)
for _ in range(size):
cur=q.pop(0) # 从队列头部取出节点
if cur.left:
q.append(cur.left)# 将左子节点加入队列
if cur.right:
q.append(cur.right)# 将右子节点加入队列
if q:#确保叶子节点后面一层的空结点不被加入进来
res.append(q[-1].val)# 将当前层最后一个节点的值加入结果列表
#step+=1# 更新层编号
return res
javascript
题解:层序遍历
var rightSideView = function(root) {
//返回层序遍历的每一层的最后一个节点
let res=[]//存储结果
let queue=[root]
if (root === null) return []
while(queue.length>0){
const n = queue.length
for(let i=0;i<n;i++){
//队列出队,拿到当前节点
const cur_node = queue.shift()
//如果是当前层的最后一个节点加入结果列表
if (i=== n-1) res.push(cur_node.val)
//当前节点的左孩子右孩子入队
if(cur_node.left) queue.push(cur_node.left)
if(cur_node.right) queue.push(cur_node.right)
}
}
return res
};