/**
* 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;
}
// 以每个A节点为root,对比B是否与该节点做root的A树重合。
// 因为每个A节点都要参加,因此先序遍历处理每个A节点。
// 针对每个root,调用recur方法就是普通的递归检查两个树重合不。
return recur(A,B)||isSubStructure(A.left,B)||isSubStructure(A.right,B);
}
public boolean recur(TreeNode A,TreeNode B){
// 只要B没有节点了,不管A如何,一定返回true
if(B==null){
return true;
}
// 不能和上一个交换,处理的是“B!=null但A==null,一样是false”
if(A==null||A.val!=B.val){
return false;
}
return recur(A.left,B.left)&&recur(A.right,B.right);
}
}