中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何判斷樹的子結構

發布時間:2021-12-15 13:57:50 來源:億速云 閱讀:143 作者:小新 欄目:大數據

小編給大家分享一下LeetCode如何實現樹的子結構,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!


題目描述

輸入兩棵二叉樹 A 和 B,判斷 B 是不是 A 的子結構。(約定空樹不是任意一個樹的子結構)

B 是 A 的子結構, 即 A 中有出現和 B 相同的結構和節點值。

例如: 給定的樹 A:

     3
    / \
   4   5
  / \
 1   2
     

給定的樹 B:

   4 
  /
 1
     

返回 true,因為 B 與 A 的一個子樹擁有相同的結構和節點值。

0 <= 節點個數 <= 10000

     

題目樣例

     

示例 1

     
輸入

A = [1,2,3], B = [3,1]

     
輸出

false

     

示例 2

     
輸入

A = [3,4,5,1,2], B = [4,1]

     
輸出

true

     

題目思考

  1. 子結構有哪些性質?
     

解決方案

     

思路

  • 分析題目, B 是 A 的子結構的話, 那么 B 的節點結構需要完全是 A 的某一部分, 而且該部分中的一部分子樹可以不在 B 中(例如題目中 A 的 2 號節點就不在 B 中)
  • 所以我們可以額外定義一個方法, 來遞歸比較當前 A 和 B 節點是否滿足子結構關系
  • 然后從 A 和 B 的根節點開始調用該方法, 如果當前滿足條件就直接返回 true, 否則就將 A 移動到其左右子節點位置, 重新與 B 的根節點比較即可
  • 下面代碼中有詳細的注釋, 方便大家理解
     

復雜度

  • 時間復雜度          O(MN)
    • 假設 A 和 B 的節點數目分別是 M 和 N, 那么最差情況是對于每個 A 節點, 都要調用一次 match 方法遍歷整個 B 樹, 所以時間復雜度是           O(MN)
  • 空間復雜度          O(M)
    • isSubStructure 遞歸調用則最多使用           O(M) 遞歸棧空間, match 遞歸調用使用           O(min(M, N)) 遞歸棧空間, 所以整體空間復雜度為           O(M)
     

代碼

class Solution:
    def isSubStructure(self, A: TreeNode, B: TreeNode) -> bool:
        if not A or not B:
            # 根據題意, B如果是空樹一定不滿足條件, 而A是空樹的話B更不可能是其子結構了
            return False

        def match(a, b):
            if not b:
                # 因為A的子樹部分可以有部分節點是B沒有的, 所以如果當前b節點是空的話是滿足條件的情況, 直接返回true
                return True
            if not a:
                # 此時b節點還有值, 但a節點是空了, B不可能是A的子結構
                return False
            # 既要當前a和b的值相等, 同時各自左右子樹部分也要匹配
            return a.val == b.val and match(a.left, b.left) and match(
                a.right, b.right)

        # B是A的子結構的充要條件: 要么當前A和B匹配, 要么A的左右子節點和B匹配
        return match(A, B) or self.isSubStructure(
            A.left, B) or self.isSubStructure(A.right, B)

以上是“LeetCode如何實現樹的子結構”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

普安县| 南康市| 垦利县| 中宁县| 屏东市| 汕头市| 郎溪县| 台湾省| 双江| 喀喇| 凤山市| 高平市| 息烽县| 安庆市| 正镶白旗| 安丘市| 获嘉县| 准格尔旗| 金溪县| 浙江省| 城口县| 西吉县| 安康市| 三门峡市| 秦皇岛市| 阿拉善左旗| 讷河市| 鸡西市| 泗水县| 东港市| 阿鲁科尔沁旗| 漳平市| 宣汉县| 平武县| 华安县| 开原市| 威信县| 龙川县| 鄂州市| 高陵县| 孝昌县|