import java.util.ArrayList; import java.util.List; /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class MySolution { private int answerLevel; public List rightSideView(TreeNode root) { if (root == null) { return new ArrayList<>(); } List answerNodes = new ArrayList<>(); List answer = new ArrayList<>(); TreeNode dummy = root; while (dummy != null) { answerNodes.add(dummy); answer.add(dummy.val); dummy = dummy.right; answerLevel++; } for (int i = 1; i < answerNodes.size(); i++) { answer = viewHelper(answerNodes.get(i), i, answerLevel, answer); } if (root.left != null) { return viewHelper(root.left, 2, answerLevel, answer); } return answer; } private List viewHelper(TreeNode node, int currentLevel, int answerLevel, List answer) { if (currentLevel-1 == answerLevel && !answer.contains(node.val)) { answer.add(node.val); } if (node.right != null) { if (currentLevel > answerLevel) { answer.add(node.right.val); answer = viewHelper(node.right, ++currentLevel, ++answerLevel, answer); } else { viewHelper(node.right, ++currentLevel, answerLevel, answer); } } if (node.left != null) { if (currentLevel > answerLevel) { answer.add(node.left.val); answer = viewHelper(node.left, ++currentLevel, ++answerLevel, answer); } else { viewHelper(node.left, ++currentLevel, answerLevel, answer); } } return answer; } } class Solution { public List rightSideView(TreeNode root) { List result = new ArrayList<>(); rightView(root, result, 0); return result; } private void rightView(TreeNode curr, List result, int currDepth) { if (curr == null) { return; } if (currDepth == result.size()) { result.add(curr.val); } rightView(curr.right, result, currDepth); rightView(curr.left, result, currDepth); } }