Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself. Example 1: Given tree s: 3 / \ 4 5 / \ 1 2 Given tree t: 4 / \ 1 2 Return true, because t has the same structure and node values with a subtree of s. Example 2: Given tree s: 3 / \ 4 5 / \ 1 2 / 0 Given tree t: 4 / \ 1 2 Return false.
Recursion:
1 class Solution { 2 public boolean isSubtree(TreeNode s, TreeNode t) { 3 if (t == null) return true; 4 if (s == null) return false; 5 if (isSametree(s, t)) return true; 6 return isSubtree(s.left, t) || isSubtree(s.right, t); 7 } 8 9 public boolean isSametree(TreeNode s, TreeNode t) { 10 if (s == null && t == null) return true; 11 if (s == null || t == null) return false; 12 if (s.val != t.val) return false; 13 return isSametree(s.left, t.left) && isSametree(s.right, t.right); 14 } 15 }