输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
package dataStruts;
public class Tree {
public static boolean isSubTree(TreeNode root,TreeNode root2){
if(root2==null){
return true;
}else if(root==null ){
return false;
}else {
if(root.val==root2.val){
boolean left = isSubTree(root.left, root2.left);
boolean right = isSubTree(root.right, root2.right);
if(left&&right){
return true;
}else {
return false;
}
}else {
return false;
}
}
}
/**
* 判断root2是不是root1的子树
* @param root1
* @param root2
* @return
*/
public static boolean HasSubtree(TreeNode root1,TreeNode root2) {
boolean flag=false;
if(root2==null || root1 ==null){
return false;
}
if(root1.val==root2.val){
flag=isSubTree(root1,root2);
}
if(!flag){
flag=HasSubtree(root1.left,root2);
}
if(!flag){
flag=HasSubtree(root1.right,root2);
}
return flag ;
}
public static void main(String[] args) {
TreeNode treeNode=new TreeNode(8);
TreeNode treeNode1=new TreeNode(8);
TreeNode treeNode2=new TreeNode(7);
TreeNode treeNode3=new TreeNode(9);
TreeNode treeNode4=new TreeNode(2);
TreeNode treeNode5=new TreeNode(4);
TreeNode treeNode6=new TreeNode(7);
treeNode.left=treeNode1;
treeNode.right=treeNode2;
treeNode1.left=treeNode3;
treeNode1.right=treeNode4;
treeNode4.left=treeNode5;
treeNode4.right=treeNode6;
TreeNode treeNode7=new TreeNode(8);
TreeNode treeNode8=new TreeNode(9);
TreeNode treeNode9=new TreeNode(2);
treeNode7.left=treeNode8;
treeNode7.right=treeNode9;
System.out.println(HasSubtree(treeNode,treeNode7));
}
}