【解题思路】
我用了以下的方法,发现在测试样例:A = [1,0,1,-4,-3],B = [1,-4],会出现报错,因为这种方法不能判断树不连续地相等。因此,必须使用一个子函数,来连续地判断B是不是A的子树。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(A != null && B != null)
{
if(A.val == B.val)
{
if(B.left != null && B.right != null)
{
return (isSubStructure(A.left, B.left) && isSubStructure(A.right, B.right)) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
}
else if(B.left != null)
{
return isSubStructure(A.left, B.left);
}
else if(B.right != null)
{
return isSubStructure(A.right, B.right);
}
return true;
}
return (isSubStructure(A.left, B) || isSubStructure(A.right, B));
}
else if(A != null && B == null)
{
return false;
}
else if(A == null && B != null)
{
return false;
}
else
{
return true;
}
}
}
以下为正确代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSubStructure(TreeNode A, TreeNode B) {
return (A != null && B!= null ) && (isSubTree(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
}
public boolean isSubTree(TreeNode A, TreeNode B)
{
if(B == null) return true;
else if(A == null) return false;
else if(A.val != B.val) return false;
else
{
return isSubTree(A.left, B.left) && isSubTree(A.right, B.right);
}
}
}