Leetcode | Binary Tree Right Side View

来源:互联网 发布:阿里云搭建ss 无网 编辑:程序博客网 时间:2024/06/03 18:50

question:

Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.

For example:
Given the following binary tree,

 1            <---/   \2     3         <--- \     \  5     4       <---

You should return [1, 3, 4].

normal solution:

使用用广度遍历 遍历到最右边的点 则加入list

public List<Integer> rightSideView(TreeNode root) {    List<Integer> res=new ArrayList<Integer>();    LinkedList<TreeNode>  list= new LinkedList<TreeNode>();    if(root==null)        return res;    list.add(root);    TreeNode tmp=null;    while(!list.isEmpty())    {        int len=list.size();        while(len!=0)        {            tmp=list.pop();            if(tmp.left!=null)                list.add(tmp.left);            if(tmp.right!=null)                list.add(tmp.right);            len--;        }        res.add(tmp.val);    }    return res;}

a better solution

深度遍历 先遍历最右结点是否存在 存在则加入list 否则遍历左结点的右结点 循环反复 最终得到结果

public List<Integer> rightSideView(TreeNode root) {    List<Integer> result = new ArrayList<Integer>();    rightView(root, result, 0);    return result;}public void rightView(TreeNode curr, List<Integer> result, int currDepth){    if(curr == null){        return;    }    if(currDepth == result.size()){        result.add(curr.val);    }    rightView(curr.right, result, currDepth + 1);    rightView(curr.left, result, currDepth + 1);}
0 0