
时间复杂度:O(n)
解题思路
利用层序遍历,每次只保存每一层的最后一个结点。
AC代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func rightSideView(root *TreeNode) []int {
res:=[]int{}
if root==nil{
return res
}
queue:=[]*TreeNode{root}
for len(queue)>0{
cnt:=len(queue)
for i:=0;i<cnt;i++{
if queue[i].Left!=nil{
queue=append(queue,queue[i].Left)
}
if queue[i].Right!=nil{
queue=append(queue,queue[i].Right)
}
}
res=append(res,queue[cnt-1].Val)
queue=queue[cnt:]
}
return res
}
感悟
印象很深刻的一道题,第一次面试时蔚来面试官就出了这道题,不过是左视图,当时没实现出来,太可惜了。

该文介绍了如何利用层序遍历算法,以O(n)的时间复杂度求解二叉树的右视图,重点在于保存每一层的最后一个节点。提供了AC代码示例,并分享了作者在面试中遇到类似问题(左视图)的经历。
359

被折叠的 条评论
为什么被折叠?



