1 boolean ans = false;
2
3 public boolean isSubtree(TreeNode s, TreeNode t) {
4 if (t == null) return true;
5 if (s == null) return false;
6 dfs(s, t);
7 return ans;
8 }
9
10 void dfs(TreeNode s, TreeNode t) {
11 if (s.val == t.val) {
12 if (check(s, t)) {
13 ans = true;
14 return;
15 }
16 }
17 if (s.left != null) dfs(s.left, t);
18 if (s.right != null) dfs(s.right, t);
19 }
20
21 boolean check(TreeNode s, TreeNode t) {
22 if (s == null && t == null) return true;
23 if (s == null || t == null) return false;
24 if (s.val == t.val) {
25 return check(s.left, t.left) && check(s.right, t.right);
26 }
27 return false;
28 }