面试题18:树的子结构(剑指Offer)

题目:输入两棵二叉树A和B,判断B是不是A的子结构。

/// <summary>
/// 遍历树判断
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
public bool IsSubStructure(TreeNode A, TreeNode B)
{
    var result = false;
    if (A != null && B != null)
    {
        if (A.val == B.val)
        {
            result = DoesTree1HaveTree2(A, B);
        }
        if (!result)
            result = IsSubStructure(A.left, B);
        if (!result)
            result = IsSubStructure(A.right, B);
    }

    return result;
}
/// <summary>
/// 找到想等根节点后,判断是否是子树
/// </summary>
/// <param name="A"></param>
/// <param name="B"></param>
/// <returns></returns>
public bool DoesTree1HaveTree2(TreeNode A, TreeNode B)
{
    if (B == null) return true;
    if (A == null) return false;
    if (A.val != B.val) return false;
    return DoesTree1HaveTree2(A.left, B.left) && DoesTree1HaveTree2(A.right, B.right);
}
public class TreeNode
{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int x)
    {
        val = x;
    }
}

第一步在树A中找到和B的根结点的值一样的结点R,第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 代码实现 主...
    _minimal阅读 2,126评论 0 0
  • 题目:输入两棵二叉树A和B,判断B是不是A的子结构。 解法:二叉树问题,递归思路
    qmss阅读 252评论 0 0
  • 题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路:我们知道树...
    minningl阅读 279评论 0 0
  • 题目:输入两颗二叉树A和B,判断B是不是A 的子结构,二叉树结构定义如下: 分为两步: 1.在树A中找到和B的根结...
    Felicia1993阅读 282评论 0 0
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,773评论 0 5