[Day38]-[二叉树]- 二叉树的右视图
作者:方勇(gopher)
- 2022 年 5 月 07 日
本文字数:611 字
阅读完需:约 2 分钟
199. 二叉树的右视图
给定一个二叉树的 根节点
root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
复制代码
示例 2:
输入: [1,null,3]
输出: [1,3]
复制代码
示例 3:
输入: []
输出: []
复制代码
题解:
func TestRightSideView(t *testing.T) {
var root = &TreeNode{ // 初始化一棵树
Val: 1,
Left: &TreeNode{
Val: 2,
Right: &TreeNode{
Val: 5,
},
},
Right: &TreeNode{
Val: 3,
Right: &TreeNode{
Val: 4,
},
},
}
var bfs func(root *TreeNode, level int) []int // 广度搜索
bfs = func(root *TreeNode, level int) []int {
var values []int // 存放每层最右端节点的值
if root == nil { // 注意root为空的情况
return values
}
queue := []*TreeNode{root} // 初始化队列
for level := 0; len(queue) > 0; level++ { // 注意queue是否为空
q := queue
queue = nil
values = append(values, q[len(q)-1].Val) // 取出队列最右侧的元素即为右节点的值
for _, node := range q { // 先放左节点,再放右节点,注意顺序,方便后续取值
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
}
}
return values
}
t.Log(bfs(root, 0))
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 6
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
评论