1)先在A中找到B的根节点,上图中就是要先找到在A中找到4。如果找根节点过程中没有找到就返回false。
2)找到根节点的值相同的时候,判断他俩的孩子是否相对。使用另外的函数,因为要判空,孩子的判空,如果为空是有意义的,而根节点的判空就是没有找到,直接返回false,而孩子的判空,例如A的孩子为空B的孩子也为空,为空的时候,其实就该返回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) {
if(A == null || B == null){
return false;
}
if((A.val == B.val) && isContains(A.left,B.left) && isContains(A.right,B.right)){
return true;
}else{
return isSubStructure(A.left,B) || isSubStructure(A.right,B);
}
}
public boolean isContains(TreeNode A,TreeNode B){
if(B == null){
return true;
}
if(A==null && B !=null){
return false;
}
return (A.val == B.val) && isContains(A.left,B.left) && isContains(A.right,B.right);
}
}