101. Symmetric Tree

本文提供了一种检查二叉树是否对称的有效方法。通过递归比较左右子树节点值来实现,确保每个对应的节点都相等且结构对称。
class Solution {
public:
    bool isSymmetric2(TreeNode* lr,TreeNode* rr) {
        if(!lr&&!rr) return true;
        else if(!lr&&rr) return false;
        else if(lr&&!rr) return false;
        else if(lr->val!=rr->val) return false;
        else return isSymmetric2(lr->left,rr->right)&&isSymmetric2(lr->right,rr->left);
    }
    bool isSymmetric(TreeNode* root) {
        if(!root) return true;
        return isSymmetric2(root->left,root->right);
    }
};

2025-09-01 17:23:58 INFO com.putian.datapush.presto.PrestoServiceImpl - cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1034) at cn.hutool.crypto.CipherWrapper.<init>(CipherWrapper.java:39) at cn.hutool.crypto.symmetric.SymmetricCrypto.init(SymmetricCrypto.java:150) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:127) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:115) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:104) at com.putian.common.secure.SecureUtil.sm4Encrypt(SecureUtil.java:1443) at com.putian.datapush.service.PushDataService.executeEncipher(PushDataService.java:452) at com.putian.datapush.service.PushDataService.encipher(PushDataService.java:407) at com.putian.datapush.service.PushDataService.makeUpData(PushDataService.java:360) at com.putian.datapush.service.PushDataService.processInBatches(PushDataService.java:307) at com.putian.PushDataJobStartor.main(PushDataJobStartor.java:35) Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC at javax.crypto.Cipher.getInstance(Cipher.java:662) at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1032) ... 11 more Caused by: java.util.jar.JarException: file:/home/dataShared/job/putian-data-pushdata.jar has unsigned entries - cn/hutool/Hutool.class at javax.crypto.JarVerifier.verifySingleJar(JarVerifier.java:510) at javax.crypto.JarVerifier.verifyJars(JarVerifier.java:371) at javax.crypto.JarVerifier.verify(JarVerifier.java:297) at javax.crypto.JceSecurity.verifyProviderJar(JceSecurity.java:164) at javax.crypto.JceSecurity.getVerificationResult(JceSecurity.java:190) at javax.crypto.Cipher.getInstance(Cipher.java:658) ... 12 more 2025-09-01 17:24:02 ERROR com.putian.PushDataJobStartor - 数据推送任务运行失败! cn.hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1034) at cn.hutool.crypto.CipherWrapper.<init>(CipherWrapper.java:39) at cn.hutool.crypto.symmetric.SymmetricCrypto.init(SymmetricCrypto.java:150) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:127) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:115) at cn.hutool.crypto.symmetric.SymmetricCrypto.<init>(SymmetricCrypto.java:104) at com.putian.common.secure.SecureUtil.sm4Encrypt(SecureUtil.java:1443) at com.putian.datapush.service.PushDataService.executeEncipher(PushDataService.java:452) at com.putian.datapush.service.PushDataService.encipher(PushDataService.java:407) at com.putian.datapush.service.PushDataService.makeUpData(PushDataService.java:360) at com.putian.datapush.service.PushDataService.processInBatches(PushDataService.java:307) at com.putian.PushDataJobStartor.main(PushDataJobStartor.java:35) Caused by: java.lang.SecurityException: JCE cannot authenticate the provider BC at javax.crypto.Cipher.getInstance(Cipher.java:662) at cn.hutool.crypto.SecureUtil.createCipher(SecureUtil.java:1032) 这个问题的解决办法?
最新发布
09-03
该错误与Bouncy Castle(BC)加密提供程序的验证有关,可能是Bouncy Castle库存在问题,或者JCE(Java Cryptography Extension)无法验证Bouncy Castle作为提供程序[^2]。以下是一些可能的解决办法: 1. **检查Bouncy Castle库依赖**:确保项目中正确引入了Bouncy Castle库的依赖。如果使用Maven,可以在`pom.xml`中添加以下依赖: ```xml <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.70</version> <!-- 使用合适的版本 --> </dependency> ``` 2. **添加Bouncy Castle作为安全提供程序**:有多种方式进行添加。 - **在代码中动态添加**: ```java import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.security.Security; public class Main { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); // 后续进行加密操作的代码 } } ``` - **修改`java.security`文件**:在`$JAVA_HOME/jre/lib/security/java.security`文件中添加`security.provider.x=org.bouncycastle.jce.provider.BouncyCastleProvider` ,其中`x`是一个合适的数字,通常根据已有提供程序的数量确定,保证添加后顺序合理。 3. **检查JCE权限文件**:确保JCE没有受到政策限制。对于Java 8及以下版本,可能需要下载并安装无政策限制权限文件(Unlimited Strength Jurisdiction Policy Files)。不过从Java 9开始,默认支持无限制的加密强度,一般无需额外处理。 4. **检查依赖冲突**:使用Maven的`mvn dependency:tree`命令或Gradle的`gradle dependencies`命令查看项目的依赖树,确保没有版本冲突或重复的Bouncy Castle库依赖。如果有冲突,可以通过`exclusions`标签排除不必要的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值