题目描述
输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
二、解题分析
1.定义一个函数,用于判断两棵树是否相等,public boolean HasSubtree(TreeNode root1,TreeNode root2)
2.查找大的树种是否含有拟子树的根节点相等的元素,找到后则以这个节点为起点,判断这两棵树是否相等。
如果相等,return true。如果不相等,继续去大树的左孩子、右孩子中查找与拟子树根节点相等的元素,如果遍历完还没找到,
表示没有这个结构,返回false,如果找到,则继续使用has函数判断两棵树是否相等。
3.在has函数中,注意递归终止条件有三个:
if(node1==null&&node2!=null)return false;
if(node2==null) return true;
if(node1.val!=node2.val)return 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(root1!=null&&root2!=null){
if(root1.val==root2.val){
result=has(root1,root2);
}
if(!result){
result=HasSubtree(root1.left,root2);
}
if(!result){
result=HasSubtree(root1.right,root2);
}
}
return result;
}
private boolean has(TreeNode node1,TreeNode node2){
if(node1==null&&node2!=null){
return false;
}
if(node2==null){
return true;
}
if(node1.val!=node2.val)return false;
return has(node1.left,node2.left)&&has(node1.right,node2.right);
}
}