<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      子結構判斷

      子結構判斷

      LCR 143. 子結構判斷

      參考題解

      題前知識

      1)子結構

      首先我們先了解一下子結構:

      • 原題信息:判斷 tree2 是否以 tree1 的某個節點為根的子樹具有 相同的結構和節點值
      • 子結構也就是B樹是否含于A樹左子樹或者右子樹之中,并且具有相同的結構和節點值,或者是否以A樹的根節點作為子樹

      2)先序遍歷

      該題使用到了先序遍歷,先序遍歷相關代碼

      先序遍歷規則:根左右

      public List<Integer> preorderTraversal(TreeNode root) {
              List<Integer> res = new ArrayList<>();
              dfs(res, root);
              return res;
      }
      private void dfs(List<Integer> res, TreeNode root){
          if(root == null){
              return;
          }
          res.add(root.val);
          dfs(res, root.left);
          dfs(res, root.right);
      
      }
      

      正題

      我們可以使用先序遍歷A的每個節點,然后我們判斷A樹是否包含B

      由于我們判斷A樹是否包含B樹是從根節點開始匹配的,所以先序遍歷的更合適本題

      判斷A樹是否包含B

      終止條件

      • B為空,說明B已經匹配完成,返回true;
      • A為空,匹配失敗,B樹已經越過了A的葉子結點,超出范圍了,返回false;
      • A的節點值和B的節點值不一樣,返回false

      返回條件

      • 判斷A的左節點是否和B的左節點相等 –> recur(A.left, B.left)
      • 判斷A的右節點是否和B的右節點相等 –> recur(A.right, B.right)
      public boolean recur(TreeNode A, TreeNode B) {
          if(B == null) return true;
          if(A == null || A.val != B.val) return false;
          return recur(A.left, B.left) && recur(A.right, B.right);
      }
      

      isSubStructure(A, B)函數

      邊界條件

      • A樹或者B樹為null,返回false

      三種情況

      • A的根節點為子樹包含B
      • A的左子樹為子樹包含B
      • A的右子樹為子樹包含B

      以上情況只要符合一種就返回true

      最終代碼:

      通過recur(A, B)找到B的根節點和B的子節點是否和A的匹配

      public boolean isSubStructure(TreeNode A, TreeNode B) {
              return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
      }
      
      public boolean recur(TreeNode A, TreeNode B) {
          if(B == null) return true;
          if(A == null || A.val != B.val) return false;
          return recur(A.left, B.left) && recur(A.right, B.right);
      }
      

      題后解析

      關于題中用到的先序遍歷思想

      1、isSubStructure(A, B)中的先序遍歷

      對于樹A的某個節點:

      1. 先訪問根節點:執行 recur(A, B) 檢查當前節點是否能作為匹配的起點
      2. 再遍歷左子樹:如果根節點不匹配,遞歸調用 isSubStructure(A.left, B)
      3. 最后遍歷右子樹:如果左子樹也沒有找到,遞歸調用 isSubStructure(A.right, B)

      2、recur 方法中的先序遍歷

      • 先比較當前根節點的值 (A.val != B.val)
      • 再遞歸比較左子樹 (recur(A.left, B.left))
      • 最后遞歸比較右子樹 (recur(A.right, B.right))
      posted @ 2025-10-01 23:47  Lantz12  閱讀(10)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 天天看片视频免费观看| 在线看国产精品自拍内射| 国产一区二区av天堂热| 成人午夜在线观看日韩| 国产偷自视频区视频| 蜜芽久久人人超碰爱香蕉| 40岁大乳的熟妇在线观看| 国产精品精品一区二区三| 啊灬啊灬啊灬快灬高潮了电影片段 | 午夜福利yw在线观看2020| 中文字幕在线精品视频入口一区| 日韩高清国产中文字幕| 日韩卡1卡2卡三卡免费网站| 中文字幕人成无码免费视频| 99热精国产这里只有精品| www久久只有这里有精品| 国产欧美另类精品久久久| 成人区人妻精品一区二区 | 又大又紧又粉嫩18p少妇| 日韩精品亚洲精品第一页| 97在线碰| 国产AV福利第一精品| 国产精品中文一区二区| 国产自国产自愉自愉免费24区| 成人午夜看黄在线尤物成人| 久久亚洲精品无码va白人极品| 亚洲日本欧美日韩中文字幕| 亚洲一级特黄大片在线观看| 国产一区二区三区黄网| 毛片内射久久久一区| 亚洲精品中文字幕一区二| 成人3D动漫一区二区三区| 中文字幕av无码免费一区| 亚洲精品三区四区成人少| 国产精品三级中文字幕| 日韩中文字幕亚洲精品| 国产一区二区三区精品片| 91偷自国产一区二区三区| 国产一区二区日韩在线| 97se亚洲国产综合在线| 亚洲中文字幕无码永久在线|