1. 程式人生 > 其它 >vue 元件同頁面多次呼叫 props 傳值無效

vue 元件同頁面多次呼叫 props 傳值無效

技術標籤:leetcode演算法java二叉樹leetcode資料結構

參考大佬題解
這題需要遍歷A的每一個節點a,判斷B是否為a的子結構。因此可以分為兩步來做

  • 遍歷A的每一個節點node函式isSubStructure,這裡採用先序遍歷
  • 判斷B是否為node的子結構isSub

isSubStructure函式

  • 遞迴引數:兩個樹節點
  • 返回條件:A或者B為空時,直接返回false。因為A為空B不為空,那麼B必然不是A的子結構;B為空,空樹不是任何樹的子結構
  • 返回值:當滿足以下三個條件之一,返回true。
    • B是A的子結構
    • B是A左子樹的子結構
    • B是A右子樹的子結構

isSub函式

  • 遞迴引數:兩個樹節點A和B
  • 返回條件:B為空,說明已經判定完畢,返回true。A為空,說明判定失敗,返回false。值得一提的是,應該優先判斷B是否為空,否則遇到A,B同時為空時會被判定為false。
  • 返回值:當同時滿足以下三個條件之一,返回true。
    • A的值和B的值相等
    • A的左子樹的值和B的左子樹的值也相等
    • A的右子樹的值和B的右子樹的值也相等
class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        // A為空B不為空,那麼B必然不是A的子結構
        // B為空,空樹不是任何樹的子結構,返回false
        if
(A == null || B == null) return false; return isSub(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B); } private boolean isSub(TreeNode A, TreeNode B){ if(B == null) return true; if(A == null) return false; return
A.val == B.val && isSub(A.left, B.left) && isSub(A.right, B.right); } }

演算法複雜度

  • 時間複雜度: O ( m n ) O(mn) O(mn) m m m n n n表示A和B的節點數量,遍歷A的每個節點需要 O ( m ) O(m) O(m),而A的每個節點又要呼叫isSub函式,用時 O ( n ) O(n) O(n)
  • 空間複雜度: O ( m ) O(m) O(m),當A和B同時退化成連結串列,佔用空間最大。那麼遞迴深度不會超過遍歷A的深度。