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 ofT1
.
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
/** * 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(T1 == null && T2 == null) return true; if(T1 == null) return false; if(T2 == null) return true; if(isSame(T1, T2)) return true; else return isSubtree(T1.left, T2) || isSubtree(T1.right, T2); } public boolean isSame(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 isSame(t1.left, t2.left) && isSame(t1.right, t2.right); } }
时间: 2024-10-19 06:50:40