ニウは一言です、何と言っても、一番右のノードを毎回トラバースすることを考えましたが、左半分だけで右半分がないノードのレイヤーがある場合、それを取得するのは簡単ではないと思いました。 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(); for(int 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); } }