美文网首页
《剑指offer第二版》面试题26:树的子结构(java)

《剑指offer第二版》面试题26:树的子结构(java)

作者: castlet | 来源:发表于2020-04-04 12:55 被阅读0次

题目描述

输入二叉树A和B,判断B是不是A的子结构。

解题思路:

  1. 采用递归的方式判断。
  2. 先判断以A为根节点的子树是否和B具有相同结构。
  3. 如果不同,则继续判断A的左右子树是否存在和B相同结构的子树。

代码

// 判断rootB是否是rootA的子结构
boolean hasSubTree(TreeNode rootA, TreeNode rootB) {
    if (rootA == null && rootB == null) {
        return true;
    }
    if (rootA == null) {
        return false;
    }

    if (rootB == null) {
        return true;
    }

    if (isSubTree(rootA, rootB)) {
        // 说明rootB和rootA根节点的子树具有相同结构
        return true;
    }
    // 继续判断rootA的左右子树是否存在和rootB相同结构的子树
    return  hasSubTree(rootA.left, rootB) || hasSubTree(rootA.right, rootB);
}
// 从根节点开始比较,判断rootB是否是rootA的子结构
boolean isSubTree(TreeNode rootA, TreeNode rootB) {
    if (rootA == null && rootB == null) {
        return true;
    }

    if (rootA == null) {
        return false;
    }

    if (rootB == null) {
        return true;
    }

    if (rootA.value != rootB.value) {
        return false;
    }
    return isSubTree(rootA.left, rootB.left) && isSubTree(rootA.right, rootB.right);
}

相关文章

网友评论

      本文标题:《剑指offer第二版》面试题26:树的子结构(java)

      本文链接:https://www.haomeiwen.com/subject/rxzdphtx.html