199. 二叉树的右视图 中等
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
代码参考:
package main
import "fmt"
func main() {
root := &TreeNode{Val: 1}
root.Left = &TreeNode{Val: 2}
root.Left.Right = &TreeNode{Val: 5}
root.Right = &TreeNode{Val: 3}
root.Right.Right = &TreeNode{Val: 4}
// 1 <---
// / \
// 2 3 <---
// \ \
// 5 4 <---
fmt.Println(rightSideView(root)) // [1 3 4]
}
// 从右侧看,其实是要求每层的最右侧节点
// 层序遍历每层取最后一个元素即可
func rightSideView(root *TreeNode) []int {
if root == nil {
return nil
}
var floors [][]int
queue := []*TreeNode{root}
for len(queue) > 0 {
var floor []int // 本层的节点值
counts := len(queue) // 本层的节点数
for i := 0; i < counts; i++ {
cur := queue[0]
queue = queue[1:]
if cur.Left != nil {
queue = append(queue, cur.Left)
}
if cur.Right != nil {
queue = append(queue, cur.Right)
}
floor = append(floor, cur.Val)
}
floors = append(floors, floor)
}
var nums []int
for _, floor := range floors {
nums = append(nums, floor[len(floor)-1]) // bingo
}
return nums
}
最后编辑: kuteng 文档更新时间: 2021-06-05 10:16 作者:kuteng