LoginSignup
0
0

再帰を使用したDFSについて

Posted at

問題 Leetcode 104. Maximum Depth of Binary Tree

バイナリ ツリーのルートを指定すると、その最大の深さを返します。

バイナリ ツリーの最大の深さは、ルート ノードから最も遠いリーフ ノードまでの最長パスに沿ったノードの数です。
Input: root = [3,9,20,null,null,15,7]
Output: 3

再帰

コード

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int maxDepth(TreeNode root) {
        int left=0, right = 0; 
        if(root == null) return 0;

        left = 1 + maxDepth(root.left);       
        right = 1 + maxDepth(root.right);

        return Math.max(left, right);
    }
}

実行時間:0ms
メモリー:43.00MB

挙動

①現在地:3
maxDepth(root.left)により、次のrootに移動
②現在地:9
maxDepth(root.left)により、次のrootに移動。

③現在地:null
移動先がnullのため、0を返す。

④現在地:9
0が返されたため、1+0になり、変数leftに1を格納する。

次にmaxDepth(root.right)が動き、次のrootに移動。

⑤現在地:null
このrootもnullなので、0を返す。

⑥現在地:9
0が返されたため、1+0になり、変数rightに1を格納する。

leftとrightどちらも1のため、Math.maxでは1になり、1を返す。

⑦現在地:3
maxDepth(root.left)の戻り値は1になり、1+1で変数leftに2を格納する

次にmaxDepth(root.right)が動き、次のrootに移動する。

⑧現在地:20
maxDepth(root.left)により、次のrootに移動する

⑨現在地:15
maxDepth(root.left)により、次のrootに移動する。

⑩現在地:null
rootがnullのため、0を返す。

⑪現在地:15
0で返されたため、1+0になり、変数leftに1を格納する
maxDepth(root.right)により、次のrootに移動する。

⑫現在地:null
rootがnullのため、0を返す。

⑬現在地:15
0で返されたため、1+0になり、変数rightに1を格納する
leftとrightは共に1のため、1を返す。

⑭現在地:20
1で返されたため、1+1により変数leftに1を格納する
次にmaxDepth(root.right)を動かし、次のrootに移動する

⑮現在地:7
maxDepth(root.left)により、次のrootに移動する。

⑯現在地:null
rootがnullのため、0を返す。

⑰現在地:7
0で返されたため、1+0になり、変数leftに1を格納する
maxDepth(root.right)により、次のrootに移動する。

⑯現在地:null
rootがnullのため、0を返す。

⑰現在地:7
0で返されたため、1+0により変数rightに1を格納する
leftとrightは共に1のため、1を返す。

⑱現在地:20
1を返されたため、1+1により、変数rightに2を格納する
leftとrightは共に2のため、2を返す。

⑲現在地:3
maxDepth(root.right)の戻り値は2のため、1+2になり、変数rightに3を格納する。

変数leftは2、変数rightは3のため、3を返す。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0