104.二分木の最大深度(Java実装)-LeetCode

記事のディレクトリ

トピック:

二分木が与えられたら、その最大の深さを見つけます。

二分木の深さは、ルートノードから最も遠いリーフノードまでの最長パス上のノードの数です。

説明:リーフノードは、子ノードのないノードを指します。

例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

最大深度3を返します。

解決策1:再帰

    /**
     * 思路
     * 遍历树
     * 不断的递归,记录左右节点的深度,返回其中最大的
     */
    public int maxDepth(TreeNode root) {
    
    
        int maxDepth = recursive(root, 1);
        return maxDepth;
    }

    private int recursive(TreeNode root, int maxDepth) {
    
    
        if (root == null) return maxDepth-1;
        int l_max = recursive(root.left, maxDepth + 1);
        int r_max = recursive(root.right, maxDepth + 1);
        return Math.max(l_max, r_max);
    }

時間計算量:オン

スペースの複雑さ:O1
ここに画像の説明を挿入

    /**
     * 思路:
     * 获取左右节点中深度最大的那个
     * 到了叶子节点0,0返回1
     * 递归这个过程
     */
    public int maxDepth(TreeNode root) {
    
    
        if (root==null)return 0;
        int leftDepth = maxDepth(root.left);
        int rightDepth = maxDepth(root.right);
        return Math.max(leftDepth,rightDepth)+1;
    }

時間計算量:オン

スペースの複雑さ:O1
ここに画像の説明を挿入

    /**
     * 思路
     * 全局max,记录当前depth
     * 比较depth max
     */
    int max;
    public int maxDepth(TreeNode root) {
    
    
        recursive(root,1);
        return max;
    }

    private void recursive(TreeNode root, int depth) {
    
    
        if (root==null)return;
        max=depth>max?depth:max;
        recursive(root.left,depth+1);
        recursive(root.right,depth+1);
    }

時間計算量:オン

スペースの複雑さ:O1
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/qq_38783664/article/details/112967368