题目:输入两棵二叉树A和B,判断B是不是A的子结构。
解题思路分为两步:
1.在树A中找到节点值跟B根节点值相同的节点R
2.判断A中以R为根节点的子树是否包含和树B一样的结构
//递归hasSubtree其实就是前序遍历了root1
//如果发现root1中存在节点的值等于root2的根节点 那么调用doesTree1HaveTree2进行判断
public static boolean hasSubtree(TreeNode root1,TreeNode root2){
boolean result=false;
if(root1!=null&&root2!=null){
if(root1.val==root2.val){
result=doesTree1HaveTree2(root1,root2);
}
if(!result){
result=hasSubtree(root1.left,root2);
}
if(!result){
result=hasSubtree(root1.right ,root2);
}
}
return result;
}
//递归判断 两个节点值相同的树节点是否符合 root1包含root2
private static boolean doesTree1HaveTree2(TreeNode root1, TreeNode root2) {
//递归结束条件就是到达树的叶子结点
if(root2==null)
return true;
if(root1==null)
return false;
if(root1.val!=root2.val)
return false;
return doesTree1HaveTree2(root1.left, root2.left)&&doesTree1HaveTree2(root1.right, root2.right);
}