从二叉树的右侧看这个二叉树,返回看到的最右侧的各个节点.....实际就是要求我们返回二叉树每一层的最右节点。
我的解法比较暴力,就是遍历整棵二叉树,返回最右节点...
具体实现上其实可以简化为只用一个数组动态记录每一层节点的情况并动态的讲最右节点的值add进去而不用记录整棵树的状态...
/**
* Definition for binary tree
* 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> ret = new ArrayList<Integer>();
TreeNode t = root;
if(root == null)
{
return ret;
}
List<List<TreeNode>> q = new ArrayList<List<TreeNode>>();
List<TreeNode> tmp = new ArrayList<TreeNode>();
tmp.add(root);
while(true)
{
if(tmp.size()==0)
{
break;
}
q.add(tmp);
List<TreeNode> temp = new ArrayList<TreeNode>();
for(TreeNode node : tmp)
{
if(node.right != null)
{
temp.add(node.right);
}
if(node.left != null)
{
temp.add(node.left);
}
}
tmp = temp;
}
for(List<TreeNode> li : q)
{
ret.add(li.get(0).val);
}
return ret;
}
}