/**
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ㄒ)/~~

本文介绍了一种用于判断一棵树是否包含另一棵树作为其子树的算法。通过递归方式比对节点值,并确保结构一致,实现了高效准确的子树匹配。特别注意,当子树与目标树完全相同时,需正确返回结果。
406

被折叠的 条评论
为什么被折叠?



