LeetCode 572 另一個樹的子樹 題解

給定兩個非空二叉樹 s 和 t,檢驗 s 中是否包含和 t 具有相同結構和節點值的子樹。s 的一個子樹包括 s 的一個節點和這個節點的所有子孫。s 也可以看做它自身的一棵子樹。

示例 1:
給定的樹 s:

     3
    / \
   4   5
  / \
 1   2
給定的樹 t:

   4 
  / \
 1   2
返回 true,因爲 t 與 s 的一個子樹擁有相同的結構和節點值。

示例 2:
給定的樹 s:

     3
    / \
   4   5
  / \
 1   2
    /
   0
給定的樹 t:

   4
  / \
 1   2
返回 false。

 

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 * 思路是:判斷t是否爲與 以s的根節點的樹 相等,如果相等,返回true,如果不等,繼續判斷s的左右子樹,遞歸至整棵樹結束。
 */
class Solution {
    
    //判斷t爲s的子樹
    public boolean isSubtree(TreeNode s, TreeNode t) {
         if (s == null) {
            return false;
        }
        if(twoTreeEqual(s,t)) return true;
        return (isSubtree(s.left,t) || isSubtree(s.right,t));
    }
    
    //判斷兩樹是否相等
    public boolean twoTreeEqual(TreeNode s,TreeNode t){
        if(s == null && t == null) return true;
        if(s != null && t == null) return false;
        if(s == null & t != null) return false;
        if(s.val != t.val) return false;
        return (twoTreeEqual(s.left,t.left) && twoTreeEqual(s.right,t.right));
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章