输入两棵二叉树A和B,判断B是不是A的子结构
解决思路:
先找到B树的根节点在A树中的位置,然后判断B树的左右子树是不是和在A树中的位置对应的左右子树相同。
代码:
构造二叉树:
class TreeNode {
public int val;
public TreeNode left, right;
public TreeNode(int val) {
this.val = val;
this.left = this.right = null;
}
}
解决方法:
public static boolean HasSubtree(TreeNode root1,TreeNode root2){
boolean result=false;
if (root1!=null&&root2!=null){
if (root1.val==root2.val){
result=DoesTreeHaveTree(root1, root2);
}
if (!result){
result=HasSubtree(root1.left,root2);
}
if (!result){
result=HasSubtree(root1.right,root2);
}
}
return result;
}
public static boolean DoesTreeHaveTree(TreeNode root1,TreeNode root2){
if (root2==null){
return true;
}
if (root1==null){
return false;
}
if (root1.val!=root2.val){
return false;
}
return DoesTreeHaveTree(root1.left,root2.left)&&DoesTreeHaveTree(root1.right,root2.right);
}
测试主类:
public static void main(String[] args) {
TreeNode root=new TreeNode(8);
TreeNode r1=new TreeNode(8);
TreeNode r2=new TreeNode(7);
TreeNode r3=new TreeNode(9);
TreeNode r4=new TreeNode(2);
TreeNode r5=new TreeNode(4);
TreeNode r6=new TreeNode(7);
TreeNode root2=new TreeNode(8);
TreeNode r7=new TreeNode(9);
TreeNode r8=new TreeNode(2);
root.left=r1;
root.right=r2;
r1.left=r3;
r1.right=r4;
r4.left=r5;
r4.right=r6;
root2.left=r7;
root2.right=r8;
System.out.println(HasSubtree(root,root2));
}