Lintcode BT Subtree
23 Dec 2015###Task1 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.
Have you met this question in a real interview? Yes 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.
###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) {
// write your code here
if (T2 == null) {
return true;
}
if (T1 == null) {
return false;
}
if (isSameTree(T1, T2)) {
return true;
}
if (isSubtree(T1.left, T2) || isSubtree(T1.right, T2)) {
return true;
}
return false;
}
public boolean isSameTree(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 isSameTree(T1.left, T2.left) && isSameTree(T1.right, T2.right);
}
}
###Points
- isSubtree === one children of T1 is identical to T2
- Need extra function to determine isSameTree()