【题目描述】输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
【解题思路】
//1. 从根节点开始判断,判断树root2是不是root1的子树。
//2. 如果不是,再递归判断root2是不是root1.left的子树。
//3. 如果第二步没成立,则再判断root2是不是root1.right的子树。
//4. 直到返回true,或者递归结束。
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean flag = false;
if(root1 != null && root2 != null){
if(root1.val == root2.val){
flag = isSubTree(root1,root2);
}
if(!flag){flag = HasSubtree(root1.left, root2);}
if(!flag){flag = HasSubtree(root1.right, root2);}
}
return flag;
}
//判断root2是不是root1的子结构
public boolean isSubTree(TreeNode root1,TreeNode root2){
if(root1 == null && root2 != null) return false;
if(root2 == null) return true;
if(root1.val != root2.val) return false;
return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right);
}
}