- 先写一个方法,传入两棵根节点值相同的树,判断tree1是否和tree2结构一样
- 再写一个方法来遍历大树,找到一个和小树根节点值相等的节点,以该节点和小树根节点的值为参数调用上面的方法即可
public class Solution {
// 递归地在大树上寻找和小树的根节点相同的节点
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if (root1 == null || root2 == null)
return false;
return HasSubtreeHelper(root1, root2)
|| HasSubtree(root1.left, root2)
|| HasSubtree(root1.right, root2);
}
// 如果找到一个根节点和小树的根节点相同,递归判断大树是否包含小树
public boolean HasSubtreeHelper(TreeNode r1, TreeNode r2) {
if(r2 == null)
return true;
if(r1 == null)
return false;
if(r1.val != r2.val)
return false;
return HasSubtreeHelper(r1.left, r2.left)
&& HasSubtreeHelper(r1.right, r2.right);
}
}