[LeetCode] 199.バイナリツリーの右側のビュー

ニウは一言です、何と言っても、一番右のノードを毎回トラバースすることを考えましたが、左半分だけで右半分がないノードのレイヤーがある場合、それを取得するのは簡単ではないと思いました。 BFSを使用してトラバースし、毎回最後の数を取得し、疲れます。

/ ** 
 *バイナリツリーノードの定義。
 *パブリッククラスTreeNode { 
 * int val; 
 * TreeNode左; 
 * TreeNode右; 
 * TreeNode(int x){val = x; } 
 *} 
 * / 
クラスSolution {
     public List <Integer> rightSideView(TreeNode root){ 
        List <Integer> res = new ArrayList <> ();
        if(root == null ){
             return res; 
        } 
        Queue <TreeNode> queue = new LinkedList <> (); 
        queue.offer(root);
        while(!queue.isEmpty()){
             int size = queue.size();
            forint i = 0; i <size; i ++ ){ 
                TreeNode node = queue.poll();
                if(node.left!= null ){ 
                    queue.offer(node.left); 
                } 
                if(node.right!= null ){ 
                    queue.offer(node.right); 
                } 
                if(i == size-1 ){ 
                    res.add(node.val); 
                } 
            } 
        }
    解像度を返す
    } 
}

方法2:考えすぎることはありません。

/ ** 
 *バイナリツリーノードの定義。
 *パブリッククラスTreeNode { 
 * int val; 
 * TreeNode左; 
 * TreeNode右; 
 * TreeNode(int x){val = x; } 
 *} 
 * / 
class Solution { 
    List <Integer> res = new ArrayList <> (); 

    public List <Integer> rightSideView(TreeNode root){ 
        dfs(root、 0); // 根本点から開始し、根点深さは0を
        返します; 
    } 

    private  void dfs(TreeNode root、int depth){
         if(root == null){
             return ; 
        } 
        if(depth == res.size()){ 
            res.add(root.val); 
        } 
        深度 ++ ; 
        dfs(root.right、depth); 
        dfs(root.left、depth); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/doyi111/p/12757847.html