思路
和上一个题目有些对称~ 上一个是保存最左侧的值,这一次要保存最右侧的值,思路差不多
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> result = new ArrayList<>();
Queue<TreeNode> queue1 = new LinkedList<>(), queue2 = new LinkedList<>();
if (null == root)
return result;
queue1.offer(root);
while (!queue1.isEmpty()) {
TreeNode node = queue1.poll();
if (null != node.left)
queue2.offer(node.left);
if (null != node.right)
queue2.offer(node.right);
if (queue1.isEmpty()) {
result.add(node.val);
queue1 = queue2;
queue2 = new LinkedList<>();
}
}
return result;
}
}
Go代码
func rightSideView(root *TreeNode) []int {
if root == nil {
return []int{}
}
q1, q2 := []*TreeNode{root}, []*TreeNode{}
result := []int{}
for len(q1) != 0 {
node := q1[0]
q1 = q1[1:]
if node.Left != nil {
q2 = append(q2, node.Left)
}
if node.Right != nil {
q2 = append(q2, node.Right)
}
if len(q1) == 0 {
q1 = q2
q2 = []*TreeNode{}
result = append(result, node.Val)
}
}
return result
}