题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
思路:
先设置一个标志位result = false,当匹配成功result就为true,否则默认返回false。
判断根节点是否相同,如果相同就递归调用方法
如果根节点不同,就判断tree1的左子树和tree2是否相同,如果不同就再判断右子树是否和tree2相同。
两棵树都不为空才继续判断,如果tree2为空说明匹配,遍历完成。
如果tree1为空,如果tree1为空&&tree2不为空说明不匹配,或者如果tree1为空,tree2为空,说明匹配。
//节点
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static boolean HasSubtree(TreeNode root1, TreeNode root2) {
boolean result=false;
if(root1!=null&&root2!=null){
if(root1.val=root2.val){
doesTree1havetree2(root1,root2);
}
if(!result){
doesTree1haveTree2(root1.left,root2);
}
if(!result){
doesTree1haveTree2(root1.right,root2);
}
}
public static boolean doesTree1haveTree2(TreeNode node1,TreeNode node2){
if(node2==null){
return true;
}
if(node1==null){
return false;
}
if(node1.val!=node2.val){
return false;
}
return doesTree1haveTree2(node1.left,node2.left)&&doesTree1haveTree2(node1.right,node2.right);
}
}