199. 二叉树的右视图
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:
输入: [1,null,3]
输出: [1,3]
示例 3:
输入: []
输出: []
提示:
- 二叉树的节点个数的范围是
[0,100]
-100 <= Node.val <= 100
有个比较好的方案是层序遍历后,找每层最后一个位置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
func rightSideView(root *TreeNode) []int { if root == nil { return []int{} } levels := [][]int{} stack := []*TreeNode{root} for i:=0; len(stack)>0; i++ { levels = append(levels, []int{}) q := []*TreeNode{} for j:=0; j<len(stack); j++ { nod := stack[j] levels[i] = append(levels[i], nod.Val) if nod.Left != nil { q = append(q, nod.Left) } if nod.Right != nil { q = append(q, nod.Right) } } stack = q } ans := []int{} for _, l := range levels { last := l[len(l)-1] ans = append(ans, last) } return ans }
|