注意:需要明确树的子结构和树的子树,是不一样的概念。这里使用两个图进行明显的对比:
一、树的子结构
两颗树,A树和B树,B树是否是A树的一部分。如下所示:只要A树种包含了B树的一部分,就证明B树是A树的子结构。
二、树的子树
两颗树,S树和T树,这里如果要判断T树是否是S树的子树,必须满足 S树中一个节点的子树包括子孙都要和T树相同,即不仅仅只是一部分,还要包括子孙相同。如下图所示
而以下的T树就不是S树的子树,因为S树中以4为结点的子树拥有的子孙在T树中不存在。故T树只能是S树的子结构,但不是子树
java实现树的子结构
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
解题思路分为以下两步:
1、对两颗树进行前序遍历,将遍历的结果放在字符串中。
2、判断A遍历的字符串中是否包含了B的字符串,如果包含了就证明是A树的子结构。
补充:字符串中的contains()方法,是当且仅当此字符串包含指定的char值序列时,返回true
java代码如下:
public static boolean HasSubtree(TreeNode root1,TreeNode root2) {
//只有当A树和B树都不为空时,才判断。否则其中一颗树为空树,都返回false
if (root1 !=null && root2 !=null){
//先对A树进行前序遍历
StringBuilder root1String=new StringBuilder();
preOrder(root1,root1String);
//对B树进行前序遍历
StringBuilder root2String=new