国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[Leetcode] Maximum and Minimum Depth of Binary Tre

boredream / 866人閱讀

摘要:遞歸法復(fù)雜度時(shí)間空間遞歸棧空間思路簡(jiǎn)單的遞歸。該遞歸的實(shí)質(zhì)是深度優(yōu)先搜索。這里我們還有改進(jìn)的余地,就是用迭代加深的有限深度優(yōu)先搜索。

Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

遞歸法 復(fù)雜度

時(shí)間 O(N) 空間 O(H) 遞歸棧空間

思路

簡(jiǎn)單的遞歸。遞歸條件是,它的最大深度是它左子樹的最大深度和右子樹最大深度中較大的那個(gè)加1。基礎(chǔ)條件是,當(dāng)遇到空節(jié)點(diǎn)時(shí),返回深度為0。該遞歸的實(shí)質(zhì)是深度優(yōu)先搜索。

代碼

public class Solution {

public int maxDepth(TreeNode root) {
    if(root == null){
        return 0;
    }
    int left = maxDepth(root.left);
    int right = maxDepth(root.right);
    return Math.max(left, right) + 1;
}

}

Minimum Depth of Binary Tree

Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

遞歸法 復(fù)雜度

時(shí)間 O(N) 空間 O(H) 遞歸棧空間

思路

當(dāng)求最大深度時(shí),我們只要在左右子樹中取較大的就行了,然而最小深度時(shí),如果左右子樹中有一個(gè)為空會(huì)返回0,這時(shí)我們是不能算做有效深度的。所以分成了三種情況,左子樹為空,右子樹為空,左右子樹都不為空。當(dāng)然,如果左右子樹都為空的話,就會(huì)返回1。

代碼
public class Solution {
    public int minDepth(TreeNode root) {
        if(root == null){
            return 0;
        }
        int depth = 0;
        if(root.left != null && root.right != null){
            int left = minDepth(root.left);
            int right = minDepth(root.right);
            depth = Math.min(left, right);
        } else if (root.left != null){
            depth = minDepth(root.left);
        } else if (root.right != null){
            depth = minDepth(root.right);
        }
        return depth + 1;
    }
}
廣度優(yōu)先搜索 復(fù)雜度

時(shí)間 O(N) 空間 O(B)

思路

遞歸解法本質(zhì)是深度優(yōu)先搜索,但因?yàn)槲覀兪乔笞钚∩疃龋⒉灰欢ㄒ闅v完全部節(jié)點(diǎn)。如果我們用廣度優(yōu)先搜索,是可以在遇到第一個(gè)葉子節(jié)點(diǎn)時(shí)就終止并返回當(dāng)前深度的。

代碼
public class Solution {
    public int minDepth(TreeNode root) {
        Queue queue = new LinkedList();
        if(root!=null) queue.offer(root);
        int depth = 0;
        while(!queue.isEmpty()){
            int size = queue.size();
            depth++;
            for(int i = 0; i < size; i++){
                TreeNode curr = queue.poll();
                if(curr.left == null && curr.right == null){
                    return depth;
                }
                if(curr.left != null) queue.offer(curr.left);
                if(curr.right != null) queue.offer(curr.right);
            }
        }
        return depth;
    }
}
迭代加深有限深度優(yōu)先搜索 復(fù)雜度

時(shí)間 O(N) 空間 O(D)

思路

英文名是Iterative Deepening Depth Limited Search.然而,廣度優(yōu)先搜索有一個(gè)致命缺陷就是,一旦分支變多,消耗空間就太大。這里我們還有改進(jìn)的余地,就是用迭代加深的有限深度優(yōu)先搜索。該算法每次迭代是一次有限深度優(yōu)先搜索,如果本輪迭代沒有發(fā)現(xiàn)目標(biāo)(這題的目標(biāo)是第一個(gè)葉子結(jié)點(diǎn)),則增加深度上限重新進(jìn)行有限深度優(yōu)先搜索。讀者可能覺得這樣會(huì)帶來很多重復(fù)計(jì)算,但實(shí)際上經(jīng)過數(shù)學(xué)證明后可以發(fā)現(xiàn),該算法的時(shí)間復(fù)雜度和廣度優(yōu)先搜索是在一個(gè)數(shù)量級(jí)的,并沒有太大的增加,而他的空間消耗僅僅是限制的深度。詳情請(qǐng)翻閱Artificial Intelligence : A Modern Approach。

代碼
public class Solution {
    public int minDepth(TreeNode root) {
        if(root==null) return 0;
        return iterativeDeepeningDFS(root);
    }
    private boolean depthLimitedSearch(TreeNode root,int depth){
        boolean left = false;
        boolean right = false;
        if(depth>0){
            if(root.left==null&&root.right==null){
                return true;
            }
            if(root.left!=null) {
                left = depthLimitedSearch(root.left, depth-1);
            }
            if(root.right!=null) {
                right = depthLimitedSearch(root.right, depth-1);
            }
            return left||right;
        } else {
            return false;
        }
    }
    private int iterativeDeepeningDFS(TreeNode root){
        int thisDepth = 1;
        boolean foundMin = false;
        while(true){
            foundMin = depthLimitedSearch(root,thisDepth);
            if(foundMin){
                return thisDepth;
            } else {
                thisDepth++;
            }
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/64524.html

相關(guān)文章

  • [Leetcode-Tree]Maximum / Minimum Depth of Binary T

    摘要:解題思路用遞歸實(shí)現(xiàn)很簡(jiǎn)單,對(duì)于每個(gè)根節(jié)點(diǎn),最大深度就等于左子樹的最大深度和右子樹的最大深度的較大值。解題思路本題的注意點(diǎn)在于如果某個(gè)根節(jié)點(diǎn)有一邊的子樹為空,那么它的深度就等于另一邊不為空的子樹的深度,其他的邏輯與上一題相同。 Maximum Depth of Binary TreeGiven a binary tree, find its maximum depth. The maxi...

    Thanatos 評(píng)論0 收藏0
  • 前端 | 每天一個(gè) LeetCode

    摘要:在線網(wǎng)站地址我的微信公眾號(hào)完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號(hào): showImg(htt...

    張漢慶 評(píng)論0 收藏0
  • leetcode部分題目答案之JavaScript版

    摘要:自己沒事刷的一些的題目,若有更好的解法,希望能夠一起探討項(xiàng)目地址 自己沒事刷的一些LeetCode的題目,若有更好的解法,希望能夠一起探討 Number Problem Solution Difficulty 204 Count Primes JavaScript Easy 202 Happy Number JavaScript Easy 190 Reverse Bi...

    alphahans 評(píng)論0 收藏0
  • LeetCode 攻略 - 2019 年 7 月下半月匯總(100 題攻略)

    摘要:月下半旬攻略道題,目前已攻略題。目前簡(jiǎn)單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...

    tain335 評(píng)論0 收藏0
  • LeetCode 104 Maximum Depth of Binary Tree 二叉樹最大深度

    LeetCode 104 Maximum Depth of Binary Tree難度:Easy 題目描述:找到一顆二叉樹的最深深度。Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down ...

    PiscesYE 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

boredream

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<