方法一
算法思想:
第一:isSubStr(A,B) 遍历找节点,分成三部分,根rec,是否是左isSub(A.left,B),是否是右isSub(A.right,B);
第二:rec(A,B) 判定A包含B,先根,再对应的左右判断,所有返回true才是匹配成功。
A根节点为A,B根节点为B 时间复杂度:O(MN) 空间复杂度:O(M) 边界条件:各种为空 补充知识:树基本都是递归,根左右分开判断,各种连接符返回值秀一脸。
/**
* 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)&&(rec(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B)); //此处注意括号逻辑连接符,以及判空原因
}
public boolean rec(TreeNode A, TreeNode B){
if(B==null) return true; //正路
if(A==null||A.val!=B.val) return false; //堵路
return rec(A.left,B.left)&&rec(A.right,B.right);
}
}