/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean a = false;
if(root1!=null && root2!=null){
if(root1.val == root2.val){
a = IsSubtree(root1,root2);
}
if(!a)
a = HasSubtree(root1.left,root2);
if(!a)
a = HasSubtree(root1.right,root2);
}
return a;
}
public boolean IsSubtree(TreeNode root1, TreeNode root2){
if( root2 == null ) return true;//必须先判断root2是否为空,否则同时结束时就不正确
if( root1 == null ) return false;
if( root1.val != root2.val ) return false;
return IsSubtree(root1.left,root2.left) && IsSubtree(root1.right,root2.right);
}
}
这道题在判断结束时,必须先判断root2是否为空,否则当子树和root1完全相同时,即同时被验证完的时候会返回false。
我在这吃了大亏。/(ㄒoㄒ)/~~