树的子结构(剑指offer)

本文介绍了一种判断一棵二叉树是否为另一棵二叉树子结构的方法。通过两个辅助函数,一个用于比较两棵树的根节点值是否相等,另一个用于递归检查子节点是否一致。实现了对二叉树子结构的有效判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树的子结构(剑指offer)


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

解法:通过两个函数实现,一个函数1进行判断A、B根节点是否相同,另一个函数2则判断A、B子节点是否仍然相同。
具体做法:函数1先判断头节点是否相同,相同执行函数2来判断子节点。若根节点不同或子节点不同,则将B根节点与A的左右子节点判断来继续寻找。 函数2中的具体操作就是,若A为空false,如果两个子节点的值不同直接返回false,否则相同的话进行递归返回该子节点的左右子节点的函数2判断,直到B子节点为空则代表找到了返回true

public class Solution {
public boolean HasSubtree(TreeNode root1,TreeNode root2) {
    boolean result = false;
    if(root1!=null && root2!=null){
        if(root1.val==root2.val){
            result = HasSubtree2(root1,root2);
        }
        if(!result){
            result = HasSubtree(root1.left,root2);
        }
        if(!result){
            result = HasSubtree(root1.right,root2);
        }
    }
    return result;
}
public boolean HasSubtree2(TreeNode root1,TreeNode root2){
    if(root2==null){
        return true;
    }
    if(root1==null){
        return false;
    }
    if(root1.val!=root2.val){
        return false;
    }
    return HasSubtree2(root1.left,root2.left)&&HasSubtree2(root1.right,root2.right);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值