描述
输入两棵二叉树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
示例2
输入:{1,2,3,4,5},{2,4}
返回值:true
示例3
输入:{1,2,3},{3,1}
返回值:false
解法:
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean result = false;
if(root2 != null && root1 != null){
if(root1.val == root2.val){
result = ToCompare(root1,root2);
}
//如果根节点不相等,则以左节点为根节点
if(!result){
result = HasSubtree(root1.left,root2);
}
//如果左子树的都不相等,则以右节点为根节点继续查找
if(!result){
result = HasSubtree(root1.right,root2);
}
}
return result;
}
public boolean ToCompare(TreeNode r1,TreeNode r2){
//如果r2遍历完,则返回ttue
if(r2 == null){
return true;
}
//如果r1为空,r2还没遍历完
if(r1 == null){
return false;
}
//如果其中有一个点没有对应上,返回false
if (r1.val != r2.val) {
return false;
}
return ToCompare(r1.left,r2.left) && ToCompare(r1.right,r2.right);
}
}