![在这里插入图片描述](https://img-blog.csdnimg.cn/9c7b44a2d7fa406098877072ac38e1b6.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVmFsZXJpZUpK,size_20,color_FFFFFF,t_70,g_se,x_16)
法一 两层递归
class Solution {
public boolean recur(TreeNode curA, TreeNode curB){
if(curB==null) return true;
if(curA==null) return false;
if(curA.val!=curB.val) return false;
boolean fl, fr;
fl = recur(curA.left, curB.left);
fr = recur(curA.right, curB.right);
return (fl&&fr);
}
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(B==null) return false;
if(A==null) return false;
if(recur(A, B)==true){
return true;
}
boolean fl= false;
boolean fr = false;
if(A.left!=null) fl = isSubStructure(A.left, B);
if(A.right!=null) fr = isSubStructure(A.right, B);
return (fl || fr);
}
}
法二 1循环+1递归
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public boolean isSame(TreeNode curA, TreeNode curB){
boolean r=true;
boolean l=true;
if(curB==null) return true;
if(curA==null) return false;
if(curA.val!=curB.val){
return false;
}
l = isSame(curA.left, curB.left);
r = isSame(curA.right, curB.right);
return (l&&r);
// if(curA.left==null && curB.left!=null){
// return false;
// }else if(curA.right==null && curB.right!=null){
// return false;
// }else{
// l = isSame(curA.left, curB.left);
// r = isSame(curA.right, curB.right);
// return (l&&r);
// }
}
public boolean isSubStructure(TreeNode A, TreeNode B) {
if(A==null || B==null){
return false;
}
boolean flag = false;
Stack<TreeNode> stk = new Stack<TreeNode>();
// List<TreeNode> lA = new LinkedList<TreeNode>();
TreeNode cur;
stk.push(A);
while(!stk.empty()){
cur = stk.pop();
// lA.add(cur);
if(cur.val==B.val){
flag = this.isSame(cur, B);
if(flag) return true; //相当于剪枝
}
if(cur.left!=null) stk.push(cur.left);
if(cur.right!=null) stk.push(cur.right);
}
return flag;
}
}