| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 | package main/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func rightSideView(root *TreeNode) []int {	view := make([]int, 0)	if root == nil {		return view	}	type Node struct {		Ptr   *TreeNode		Level int	}	viewed := make(map[int]bool)	queue := make([]Node, 0)	curr := root	queue = append(queue, Node{curr, 0})	for len(queue) != 0 {		curr = queue[0].Ptr		level := queue[0].Level		queue = queue[1:] // Pop		if !viewed[level] {			view = append(view, curr.Val)			viewed[level] = true		}		if curr.Right != nil {			queue = append(queue, Node{curr.Right, level + 1})		}		if curr.Left != nil {			queue = append(queue, Node{curr.Left, level + 1})		}	}	return view}// func main() {// 	fmt.Println(rightSideView(nil))// 	//        1// 	//       /// 	//      2// 	//     / \// 	//    3   4// 	n4 := TreeNode{4, nil, nil}// 	n3 := TreeNode{3, nil, nil}// 	n2 := TreeNode{2, &n3, &n4}// 	n1 := TreeNode{1, &n2, nil}// 	fmt.Println(rightSideView(&n1))// }
 |