题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
示例1
输入
{8,8,#,9,#,2,#,5},{8,9,#,2}
返回值
true
在线链接
代码:
public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
if(root1 == null || root2 == null){
return false;
}
return search(root1,root2);
}
private boolean search(TreeNode root1,TreeNode root2) {
if(root1 != null){
if(root1.val == root2.val && isSub(root1,root2)){
return true;
}else {
return search(root1.left,root2) || search(root1.right,root2);
}
}
return false;
}
private boolean isSub(TreeNode root1,TreeNode root2) {
if(root1 == null && root2 == null){
return true;
}
if(root1 == null){
return false;
}
if(root2 == null){
return true;
}
if(root1.val == root2.val){
return isSub(root1.left,root2.left) && isSub(root1.right,root2.right);
}
return false;
}
}
思路概述:
遍历第一棵树,找到结点值与第二棵树根节点相同的结点,然后对比其子结点是否一致,若一致,返回true,若不一致,继续遍历第一棵树。