二叉树相关代码有大量的指针操作,每一次使用指针的时候都要判断是否为null。
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
//如果A、B两棵树有一棵为空,则返回false
if(root2==null || root1==null)
return false;
//定义boolean变量,flag为false
boolean flag = false;
//如果根节点一样,则开始判断以这个根节点为起点是否包含B树
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;
}
private boolean isSubTree(TreeNode root1, TreeNode root2) {
if(root2==null)
return true;
//如果Tree2还没有遍历完,Tree1却遍历完了。返回false
if(root1==null && root2!=null)
return false;
if(root1.val==root2.val){
//如果根节点对应的上,那么就分别去子节点里面匹配
return isSubTree(root1.left, root2.left) && isSubTree(root1.right, root2.right);
}
return false;
}
}