二叉树是否为子树的判断问题:
题目描述:

代码及注释:
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root2==null)return false;//如果root2为null,则不是子树
return process(root1,root2);
}
//process函数是递归函数
boolean process(TreeNode root1,TreeNode root2){
if (root2==null&&root1==null){
/*
////*
如果root2和root1都是空,说明的前面的路程完整的走完了并且没有结束函数,
说明这颗子树是成立的
*/
return true;
}
/*
如果root2是空的,但是root1不空的,这时候也说明root1的路程root2成功走完了,则也返回true
*/
if(root2==null)return true;
//此处完全可以放到羡慕递归判断,但是如果此处的if去掉的话,一下代码会报nulexception的错误
if (root1==null){
return false;
}
//如果直相等,并且左右子树的值结构分别一样的话,则是子树,返回true
if (root1.val==root2.val&&process(root1.left,root2.left)&&process(root1.right,root2.right)){
return true;
}
//此处其实也能写成
/*
else{
return process(root1.left,root2)||process(root1.right,root2);
}
*/
//此为简化代码
return process(root1.left,root2)||process(root1.right,root2);
}
牛客标准答案:
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1==null&&root2==null) return true;
if(root1==null) return false;
if(root2==null) return true;
if(root1.val==root2.val&&
HasSubtree(root1.left, root2.left)&&
HasSubtree(root1.right, root2.right))
return true;
return HasSubtree(root1.left, root2)||HasSubtree(root1.right,root2);
}
}
浙公网安备 33010602011771号