描述
输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)
假如给定A为{8,8,7,9,2,#,#,#,#,4,7},B为{8,9,2},2个树的结构如下,可以看出B是A的子结构
数据范围:
0 <= A的节点个数 <= 10000
0 <= B的节点个数 <= 10000
示例1
输入:
{8,8,7,9,2,#,#,#,#,4,7},{8,9,2}
返回值:
true
我们要判断某个树是不是另一个树的子结构,首先要找到在大的树里值和子树的根节点相同的节点,然后以这个节点开始,对两个树进行遍历,判断每个节点的值是否相同,当子树到了null节点时,就说明这一边的节点都相同,如果子树不为null,大树先到null了,就说明不包含子树,这样又要接着遍历大树找下一个和子树根节点相同的节点位置
Java代码
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root2==null||root1==null)return false;
boolean result=false;
if(root1.val==root2.val)result=swap(root1,root2);
if(result==true)return true;
else return HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
}
public boolean swap(TreeNode root1,TreeNode root2){
if(root2==null)return true;
if(root1==null||root1.val!= root2.val)return false;
else return swap(root1.left,root2.left)&&swap(root1.right,root2.right);
}