剑指offer题解(C语言)----JZ26 树的子结构

该博客讨论了如何判断一棵二叉树是否是另一棵二叉树的子结构,主要通过递归的方法实现。代码中定义了两个关键函数:isEqual用于判断两棵树是否完全相等,HasSubtree用于判断一棵树是否包含另一棵树的子结构。通过比较根节点的值和递归比较左右子树来完成判断。
摘要由CSDN通过智能技术生成

题目

输入两棵二叉树A,B,判断B是不是A的子结构。(我们约定空树不是任意一个树的子结构)

解析

树的思想就是递归,因为每一个结点可以看作是独立的结点或是其父节点的左右孩子。是否是子树的判断实际上就是判断两树是否相等,若不想等,则判断其中一方子树与树是否相等。

代码

int IsEqual(struct TreeNode* Root1, struct TreeNode* Root2)
{
    if (Root2 == NULL)
        return 1;
    if (Root1 == NULL)
        return 0;
    if (Root1->val != Root2->val) //若根节点不同,则树必定不同
        return 0;
    else
        return(IsEqual(Root1->left, Root2->left) && IsEqual(Root1->right, Root2->right)); //若根节点相同,则递归,对根节点以下的结点同样使用的方式判断是否相等
}
bool HasSubtree(struct TreeNode* pRoot1, struct TreeNode* pRoot2 ) {
    int result = 0;
 
    if (pRoot1 && pRoot2) //若根1,2均存在
    {
        if (pRoot1->val == pRoot2->val) //若根节点1,2相同,则判断1,2树是否相同
            result = IsEqual(pRoot1, pRoot2);
        if (!result)
            result = HasSubtree(pRoot1->left, pRoot2); //若不同,则比较1的左子树和2
        if(!result)
            result = HasSubtree(pRoot1->right, pRoot2); //或比较1的右子树和2
    }
    return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值