1. 程式人生 > 其它 >SQL語法總結

SQL語法總結

1.問題描述

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

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

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

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

3
/ \
9 20
/ \
15 7

返回它的最大深度 3 。

2.求解

遞迴

程式碼如下

    /*
    執行用時:0 ms, 在所有 Java 提交中擊敗了100.00% 的使用者
	記憶體消耗:38.5 MB, 在所有 Java 提交中擊敗了69.47% 的使用者
	*/
    public int maxDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        int leftHeight = maxDepth(root.left);
        int rightHeight = maxDepth(root.right);
        return Math.max(leftHeight,rightHeight) + 1;
    }
  • 時間複雜度:O(n)
  • 空間複雜度:O(h),h為二叉樹的最大深度

廣度優先搜尋

  • 與一般的廣度優先搜尋有些許不同,我們在佇列裡存放的應該是當前層的所有節點

    每次擴充套件下一層時,我們將佇列裡的所有節點都拿出來擴充套件

程式碼如下

    /*
    執行用時:1 ms, 在所有 Java 提交中擊敗了16.50% 的使用者
    記憶體消耗:38.6 MB, 在所有 Java 提交中擊敗了53.41% 的使用者
    */
    public int maxDepth(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int ans = 0;
        while (!queue.isEmpty()) {
            int size = queue.size();
            while(size > 0) {
                TreeNode node = queue.poll();
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
                size--;
            }
            ans++;
        }
        return ans;
    }
  • 時間複雜度、空間複雜度均為O(n)