<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Subtree ### Source - lintcode: [(245) Subtree](http://www.lintcode.com/en/problem/subtree/#) ~~~ You have two every large binary trees: T1, with millions of nodes, and T2, with hundreds of nodes. Create an algorithm to decide if T2 is a subtree of T1. Example T2 is a subtree of T1 in the following case: 1 3 / \ / T1 = 2 3 T2 = 4 / 4 T2 isn't a subtree of T1 in the following case: 1 3 / \ \ T1 = 2 3 T2 = 4 / 4 Note A tree T2 is a subtree of T1 if there exists a node n in T1 such that the subtree of n is identical to T2. That is, if you cut off the tree at node n, the two trees would be identical. ~~~ ### 題解 判斷 T2是否是 T1的子樹,首先應該在 T1中找到 T2的根節點,找到根節點后兩棵子樹必須完全相同。所以整個思路分為兩步走:找根節點,判斷兩棵樹是否全等。咋看起來極其簡單,但實際實現中還是比較精妙的,尤其是遞歸的先后順序及條件與條件或的處理。 ### Java ~~~ /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param T1, T2: The roots of binary tree. * @return: True if T2 is a subtree of T1, or false. */ public boolean isSubtree(TreeNode T1, TreeNode T2) { if (T2 == null) return true; if (T1 == null) return false; return identical(T1, T2) || isSubtree(T1.left, T2) || isSubtree(T1.right, T2); } private boolean identical(TreeNode T1, TreeNode T2) { if (T1 == null && T2 == null) return true; if (T1 == null || T2 == null) return false; if (T1.val != T2.val) return false; return identical(T1.left, T2.left) && identical(T1.right, T2.right); } } ~~~ ### 源碼分析 這道題的異常處理相對 trick 一點,需要理解 null 對子樹的含義。另外需要先調用`identical`再遞歸調用`isSubtree`判斷左右子樹的情況。方法`identical`中調用`.val`前需要判斷是否為 null, 而后遞歸調用判斷左右子樹是否 identical。 ### 復雜度分析 identical 的調用,時間復雜度近似 O(n)O(n)O(n), 查根節點的時間復雜度隨機,平均為 O(m)O(m)O(m), 故總的時間復雜度可近似為 O(mn)O(mn)O(mn). ### Reference - [LintCode: Subtree](http://cherylintcode.blogspot.com/2015/06/subtree.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看