问题:
给你两棵二叉树 root
和 subRoot
。检验 root
中是否包含和 subRoot
具有相同结构和节点值的子树。如果存在,返回 true
;否则,返回 false
。
二叉树 tree
的一棵子树包括 tree
的某个节点和这个节点的所有后代节点。tree
也可以看做它自身的一棵子树。
题解:
不断拆解二叉树root,不断递归去验证拆解后的子树是否与subRoot相同。
代码:
package com.zzp.shujujiegou.binary.tree;
public class OJ572 {
public boolean isSubtree(TreeNode s, TreeNode t) {
if(s==null) return false;
return isSubtree(s.left,t)||isSubtree(s.right,t)||isSameTree(s,t);
}
public boolean isSameTree(TreeNode s, TreeNode t) {
if(s==null&&t==null) return true;
if(s==null||t==null) return false;
if(s.data!=t.data) return false;
return isSameTree(s.left,t.left)&&isSameTree(s.right,t.right);
}
}