树的题是最简单的,因为递归是最简单的一种思路。题目在这里。思路就是合并左子树和右子树各自返回的最右List。
贴代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> newlist;
if (root==null) {
return (new ArrayList<Integer>());
}
else if (root.left==null && root.right==null) {
newlist = new ArrayList<Integer>();
}
else if(root.left==null && root.right!=null) {
newlist = rightSideView(root.right);
}
else if(root.right==null && root.left!=null) {
newlist = rightSideView(root.left);
}
else {
List<Integer> one = rightSideView(root.left);
List<Integer> two = rightSideView(root.right);
if (one.size()<=two.size()) newlist = two;
else {
one = one.subList(two.size(), one.size());
two.addAll(one);
newlist = two;
}
}
newlist.add(0, root.val);
return newlist;
}
}
Note1:java中List是Interface类,所以
List<Integer> list = new ArrayList<Integer>();
是错的。List必须new成它的实现类AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector中的一种。
Note2:List的成员函数subList中的第二个参数toIndex是exclusive的,即返回元素不包含这一个。