*LeetCode-Binary Tree Right Side View

来源:互联网 发布:ps mac中文破解版下载 编辑:程序博客网 时间:2024/06/14 08:25

应该看出来和level order traversal 一样

第一种方法就是基于这个的 每次展开一层 从最右边开始展开 然后将这一层的第一个放入 即最右边一个 用一个queue维护 

public class Solution {    public List<Integer> rightSideView(TreeNode root) {        Queue<TreeNode> que = new LinkedList<TreeNode> ();        List<Integer> res = new ArrayList<Integer>();        if ( root == null )            return res;        que.offer( root );        while ( que.size () != 0 ){            int size = que.size();            for ( int i = 0; i < size; i ++ ){                TreeNode cur = que.poll();                if ( i == 0 )                    res.add ( cur.val );                if ( cur.right != null )                    que.offer( cur.right );                if ( cur.left != null )                    que.offer( cur.left );            }        }        return res;    }}

第二种方法就是dfs 很巧妙的就是每次的层数和res里面已经有的个数应该相等 

public class Solution {    public List<Integer> rightSideView(TreeNode root) {        List<Integer> res = new ArrayList<Integer>();        helper ( res, root, 0 );        return res;    }    public void helper ( List<Integer> res, TreeNode root, int depth ){        if ( root == null )            return;        if ( res.size() == depth )            res.add(root.val);        helper ( res, root.right, depth + 1);        helper ( res, root.left, depth + 1);    }}


0 0
原创粉丝点击