📌  相关文章
📜  检查一棵二叉树是否是另一棵二叉树的子树 |设置 1(1)

📅  最后修改于: 2023-12-03 14:55:43.518000             🧑  作者: Mango

检查一棵二叉树是否是另一棵二叉树的子树

当我们需要在一棵大的二叉树中找到一棵子树时,我们需要检查这个子树是否与大树的某个子树完全一致。本文将介绍如何使用递归的方法判断一棵二叉树是否是另一棵二叉树的子树。

实现思路

对于每个节点,寻找以该节点为根节点的子树是否与待比较的子树一致。如果该子树中的所有节点均与待比较子树的节点一一对应,则说明这两棵二叉树完全一致。

具体实现过程如下:

  1. 遍历大树的每个节点,直到找到一个与待比较子树根节点相同的节点。

  2. 以该节点为根节点,遍历大树和待比较子树,比较两个子树中的每个节点是否一一对应。

  3. 如果两棵二叉树完全一致,则返回true,否则返回false。

代码实现

下面的代码实现了以上思路,其中 isSameTree 用于比较两棵二叉树是否完全一致。

public boolean isSameTree(TreeNode p, TreeNode q) {
    if (p == null && q == null) return true;
    if (p == null || q == null) return false;
    if (p.val != q.val) return false;
    return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
}

public boolean isSubtree(TreeNode s, TreeNode t) {
    if (s == null && t == null) return true;
    if (s == null || t == null) return false;

    if (isSameTree(s, t)) return true;
    return isSubtree(s.left, t) || isSubtree(s.right, t);
}
总结

本文介绍了如何使用递归的方法判断一棵二叉树是否是另一棵二叉树的子树。该算法的时间复杂度为O(mn),m和n分别为大树和待比较子树的节点数。该算法具有较好的广泛性和可扩展性,可以用于判断两棵二叉树是否相似,以及检查图是否包含另一个图等问题。