104. 二叉樹的最大深度

LeetCode地址https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/java

題目描述:node

給定一個二叉樹,找出其最大深度。spa

二叉樹的深度爲根節點到最遠葉子節點的最長路徑上的節點數。code

說明: 葉子節點是指沒有子節點的節點。blog

示例:
給定二叉樹 [3,9,20,null,null,15,7]遞歸

   3
   / \
  9  20
    /  \
   15   7

返回它的最大深度 3 。leetcode

方法一:遞歸get

/**
     * 方法一:遞歸
     * 複雜度分析
     * 時間複雜度:咱們每一個結點只訪問一次,所以時間複雜度爲 O(N), 其中 N 是結點的數量。
     * 空間複雜度:在最糟糕的狀況下,樹是徹底不平衡的,例如每一個結點只剩下左子結點,遞歸將會被調用 N 次(樹的高度),
     * 所以保持調用棧的存儲將是 O(N)。但在最好的狀況下(樹是徹底平衡的),樹的高度將是 \log(N)log(N)。所以,
     * 在這種狀況下的空間複雜度將是 O(\log(N))。
     *
     * @param root
     * @return
     */
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        } else {
            int left_height = maxDepth(root.left);
            int right_height = maxDepth(root.right);
            return java.lang.Math.max(left_height, right_height) + 1;
        }
    }

方法二:迭代class

/**
     * 方法二:使用迭代(層序遍歷訪問節點)
     * @param root
     * @return
     */
    public int maxDepth_1(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        if (root == null) return 0;

        queue.offer(root);
        int levelSize = 1;
        int height = 0;
        while (queue.isEmpty() == false) {

            TreeNode node = queue.poll();
            levelSize--;
            if (node.left != null) queue.offer(node.left);
            if (node.right != null) queue.offer(node.right);

            if (levelSize == 0) {
                height++;
                levelSize = queue.size();
            }
        }
        return height;
    }
相關文章
相關標籤/搜索