給定兩個非空二叉樹 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));
}
}