题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路:
从A树根开始往下遍历,遍历到的每一个节点,都看做是一个新的根,然后与B比较是否相同。以上主要分为2块:
A树的遍历 + A子树与B树比较是否相同。对于第一块可以采用递归来遍历,对于第二块也采用递归来逐个对应遍历比较。
Java代码实现:
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if (root1==null && root2!=null)
return false;//递归出口1
if (root2==null)
return false;//递归出口2
boolean flag = false;
if (root1.val==root2.val){
flag = isSubtree(root1, root2);
}
if (!flag){
flag = HasSubtree(root1.left, root2)||HasSubtree(root1.right, root2);//A树的递归遍历
}
return flag;
}
public boolean isSubtree(TreeNode root1, TreeNode root2){
if (root1==null&&root2!=null)
return false;//递归出口1
if (root2==null)
return true;//递归出口2
if (root1.val==root2.val)//采用递归来逐个对应遍历比较
return isSubtree(root1.left, root2.left)&&isSubtree(root1.right, root2.right);
else
return false;
}
}
END