输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {

boolean flag=false;
if(root1!=null&&root2!=null){
if(root1.val==root2.val) flag=Dosesame(root1,root2);//对当前节点执行匹配
if(!flag)flag=HasSubtree(root1.left,root2);//当前节点匹配失败 更新root1节点到左子节点
if(!flag)flag=HasSubtree(root1.right,root2);//左子节点也不成功时 进入右子节点
}
return flag;
}
public boolean Dosesame(TreeNode root1,TreeNode root2){
if(root1==null&&root2!=null)return false; //只匹配了一部分
if(root2==null)return true; //匹配完成
if(root1.val!=root2.val)return false;//匹配过程中 任何地方发生 匹配都失败

return Dosesame(root1.left,root2.left)&&Dosesame(root1.right,root2.right);//当前节点值相等 再递归同时匹配左右节点
}
}

posted @ 2018-03-09 15:29  薄凉古风  阅读(137)  评论(0编辑  收藏  举报