题目描述:
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
示例1
输入:
{8,8,#,9,#,2,#,5},{8,9,#,2}
返回值:
true
解题思路:
首先最能想到的就是我们可以先遍历A树,然后在A树里面找是不是有和B树根节点相同的节点,如果有的话就从该节点向下,一直对比比较,看是否每一个节点相同,知道b数遍历到空节点。如果这个过程中返回值都为true,那就说明B树是A树的子结构,如果在这个过程中有一个不是的话,那就返回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) {
if(root1==null||root2==null){
return false;
}
return isSubTree(root1,root2)||HasSubtree(root1.left,root2)||HasSubtree(root1.right,root2);
}
public boolean isSubTree(TreeNode root1,TreeNode root2){
if(root2==null){
return true;
}
if(root1==null){
return false;
}
return root2.val==root1.val&&isSubTree(root1.left,root2.left)&&isSubTree(root1.right,root2.right);
}
}