LeetCode:1457. 二叉树中的伪回文路径(DFS C++ Java)

目录

1457. 二叉树中的伪回文路径

题目描述:

原理思路:


1457. 二叉树中的伪回文路径

题目描述:

        给你一棵二叉树,每个节点的值为 1 到 9 。我们称二叉树中的一条路径是 「伪回文」的,当它满足:路径经过的所有节点值的排列中,存在一个回文序列。

请你返回从根到叶子节点的所有路径中 伪回文 路径的数目。

示例 1:

输入:root = [2,3,1,3,1,null,1]
输出:2 
解释:上图为给定的二叉树。总共有 3 条从根到叶子的路径:红色路径 [2,3,3] ,绿色路径 [2,1,1] 和路径 [2,3,1] 。
     在这些路径中,只有红色和绿色的路径是伪回文路径,因为红色路径 [2,3,3] 存在回文排列 [3,2,3] ,绿色路径 [2,1,1] 存在回文排列 [1,2,1] 。

示例 2:

输入:root = [2,1,1,1,3,null,null,null,null,null,1]
输出:1 
解释:上图为给定二叉树。总共有 3 条从根到叶子的路径:绿色路径 [2,1,1] ,路径 [2,1,3,1] 和路径 [2,1] 。
     这些路径中只有绿色路径是伪回文路径,因为 [2,1,1] 存在回文排列 [1,2,1] 。

示例 3:

输入:root = [9]
输出:1

提示:

  • 给定二叉树的节点数目在范围 [1, 105] 内
  • 1 <= Node.val <= 9

实现代码与解析:

dfs

C++

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> cnt = vector<int>(11, 0);
    
    int res = 0;
    bool check() {
        int flag = 1; // 只能有一个奇数
        for (int i = 1; i <= 9; i++) {
            if (cnt[i] % 2 == 0) continue;
            else {
                if (flag == 0) return false;
                else flag--;
            }
        }
        return true;
    }
    void dfs(TreeNode* cur) {
        if (cur == 0) return;

        cnt[cur->val]++;
        if (!cur->left && !cur->right) {
            if (check()) res++;
        }
        if (cur->left) dfs(cur->left);
        if (cur->right) dfs(cur->right);
        cnt[cur->val]--;

        return;
    }
    int pseudoPalindromicPaths (TreeNode* root) {

        dfs(root);
        return res;
    }
};

Java

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */


class Solution {
    int[] cnt = new int[11];
    int res = 0;
    public boolean check() {
        int flag = 1;
        for (int i = 1; i <= 9; i++) {
            if (cnt[i] % 2 == 0) continue;
            else {
                if (flag == 0) return false;
                else flag--;
            }
        }
        return true;
    }

    public void dfs(TreeNode cur) {
        if (cur == null) return;

        cnt[cur.val]++;
        if (cur.left == null && cur.right == null) {
            if (check()) res++;
        }
        if (cur.left != null) dfs(cur.left);
        if (cur.right != null) dfs(cur.right);
        cnt[cur.val]--;

        return;
    }

    public int pseudoPalindromicPaths (TreeNode root) {
        dfs(root);
        return res;
    }
}

原理思路:

        简单的dfs,判断一下叶子节点的路径中,所有值最多只能有一个奇数,其余全是偶数就为伪回文,即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/190619.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机DHT11湿度测量与控制-CO2-光照报警系统程序和仿真

一、系统方案 1、本设计采用这51单片机作为主控器。 2、DHT11温湿度、CO2、光照强度送到液晶1602显示。 3、按键设置报警值。 4、蜂鸣器报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 //初始化LCD*********************************…

初始化GPIO流程 以及点亮LED

点亮LED 需要单片机上的GIPIO端口引脚 输出对应的电压来对LED进行点亮 &#xff0c;关于GPIO的初始化流程其实我们只需要牢牢记住这张图即可 具体参考&#xff1a; https://blog.csdn.net/k666499436/article/details/123971479 1. GPIO的初始化 流程 使能时钟 在stm32中&…

51单片机蜂鸣器发出悦耳的声音

51单片机蜂鸣器发出悦耳的声音 1.概述 这篇文章介绍单片机控制蜂鸣器入门小实验&#xff0c;通过该实验掌握蜂鸣器发声的原理&#xff0c;控制声音发出我们想听的音乐。 2.蜂鸣器发声 2.1.硬件原理 1.蜂鸣器正极接单片机20号引脚VCC&#xff0c;负极接19号引脚P1.7 2.20MH…

从微软Cosmos DB浅谈一致性模型

最近回顾了微软的Cosmos DB的提供一致性级别&#xff0c;重新整理下一致性模型的相关内容。 0. Cosmos DB Cosmos DB&#xff08;Azure Cosmos DB&#xff09;是由微软推出的一个支持多模型、多 API 的全球分布式数据库服务。它旨在提供高度可扩展性、低延迟、强一致性和全球…

Java作业四

要求&#xff1a;编写带图形界面的聊天程序&#xff0c;实现让客户可以持续地发送消息给服务器&#xff0c;服务器也可以即时看到客户端发送的消息&#xff0c;并回消息给客户端。 程序运行界面如下&#xff1a; 老师写的&#xff1a; 1、客户端 package Demo02; import java.…

Redis面试题:Redis的数据过期策略有哪些?

目录 面试官&#xff1a;Redis的数据过期策略有哪些 ? 惰性删除 定期删除 面试官&#xff1a;Redis的数据过期策略有哪些 ? 候选人&#xff1a; 嗯~&#xff0c;在redis中提供了两种数据过期删除策略 第一种是惰性删除&#xff0c;在设置该key过期时间后&#xff0c;我们…

避免客户开发信被限制的方法与策略

开发信是外贸或者出海企业常用的一种开发客户的方式。相较于其他的获客方式&#xff0c;开发信能够更加精准地投放到客户中&#xff0c;并且只需承担较低的成本。但是&#xff0c;由于一些限制管制要求&#xff0c;外贸人员可能会遇到开发新被限制的情况。今天&#xff0c;小编…

五大自动化测试的 Python 框架

1、Selenium: Selenium 是一个广泛使用的自动化测试框架&#xff0c;用于测试Web应用程序。它支持多种浏览器&#xff0c;并通过模拟用户在浏览器中的操作来进行测试。Selenium 的 Python 客户端库是 Selenium WebDriver&#xff0c;它提供了一组API来编写测试脚本&#xff0c…

SpringBoot校验List失效解决方法

文章目录 SpringBoot校验List失效解决方法附&#xff1a;校验基本数据类型和String类型的方法参数时也需要在类上加Validated SpringBoot校验List失效解决方法 失效场景示例代码&#xff1a; RestController RequestMapping("/v1/jx/flowSummary") Slf4j public cl…

【Hadoop】分布式文件系统 HDFS

目录 一、介绍二、HDFS设计原理2.1 HDFS 架构2.2 数据复制复制的实现原理 三、HDFS的特点四、图解HDFS存储原理1. 写过程2. 读过程3. HDFS故障类型和其检测方法故障类型和其检测方法读写故障的处理DataNode 故障处理副本布局策略 一、介绍 HDFS &#xff08;Hadoop Distribute…

itop4412移植lrzsz工具踩坑笔记

4412开发板在传输文件一直用的都是tftp文件传输&#xff0c;但这样效率有点慢&#xff0c;平常在linux上习惯用lrzsz工具来传输文件&#xff0c;特此记录下&#xff0c;因为不熟悉linux编译 踩坑了很多地方 在操作前 我们的虚拟机要线安装好编译环境 下载lrzsz源码&#xff0…

轻松实现文件按数量平均分类,高效整理并自动新建文件夹保存“

你是否曾经因为文件数量过多&#xff0c;整理起来繁琐而感到烦恼&#xff1f;是否曾经为了新建文件夹而手动一个一个进行创建&#xff0c;费时又费力&#xff1f;现在&#xff0c;我们的智能文件管理工具将为你解决这些问题&#xff01; 首先第一步&#xff0c;我们要进入文件…

整顿国产剧流水线“村花”?给三次元一点小小的美女震撼!

演员部分不符合角色的形象就用配角来补充说明&#xff0c;在国产剧里&#xff0c;短时间出现了两次。 演员的美从直观的肉眼可见&#xff0c;变成了配角用台词传达的结果。 &#xff08;图&#xff1a;宁安如梦&#xff09; 就像《以爱为营》里&#xff0c;女主的闺蜜随口就是…

【李宏毅-元学习】

一、基本概念 1、元学习&#xff1a;学习如何学习&#xff0c;超参数调整 2、机器学习和元学习 机器学习&#xff1a;定义函数&#xff08;未知参数&#xff09;-定义损失函数-优化&#xff08;最小化损失函数&#xff09; 3、什么是元学习 机器学习通过三个步骤找到了学习算…

Linux MMC子系统 - 6.eMMC 5.1工作模式-设备识别模式

By: Ailson Jack Date: 2023.11.26 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/165.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

数据库基础教程之数据库的创建(二)

双击打开Navicat,点击:文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数,然后点击:连接测试,连接成功后再点击确定。 创建数据表   3.1 方法1   3.1.1.双击你的数据库-》双击public-》双击选中表-》右键-》新建表-》常规 3.1.2.设置字段信息   双击选中创建…

Leetcode 1727. 具有重排的最大子矩阵

题目要求&#xff1a; 给定一个大小为 m x n 的二进制矩阵&#xff0c;并且允许您以任意顺序重新排列矩阵的列。 对列进行最佳重新排序后&#xff0c;返回矩阵中每个元素都为 1 的最大子矩阵的面积。 输入&#xff1a;矩阵 [[0,0,1],[1,1,1],[1,0,1]] 输出&#xff1a;4 说明…

【领域驱动设计 学习目标及大纲】从CRUD到架构设计

从2018年至今&#xff0c;已工作了5年有余&#xff0c;回望这5年的工作历程&#xff0c;虽然一直在学习、一直在积累&#xff0c;但其实都在术的层面上停留&#xff0c;也就是具体的技术点。这5年多的时间里其实也不是没有窥道的想法&#xff1a; 一次是2018年刚工作的时候&am…

理解国外大佬用Web做出来跨窗口渲染动画效果

今天刷抖音看见国外一个大佬用Web做出来一个可以跨多浏览器窗口实时互动的渲染动画效果,觉得非常新奇,我就去看了一下源码,作者还写了一个非常好的例子帮助理解,我自己也仿写了作者的例子加深理解 **GitHub预览地址**麻烦帮忙点亮星星谢谢哈哈哈~ 整体思路是监听visibilityStat…

hdlbits系列verilog解答(exams/m2014_q4f)-47

文章目录 一、问题描述二、verilog源码三、仿真结果 一、问题描述 实现以下电路&#xff1a; 二、verilog源码 module top_module (input in1,input in2,output out);assign out in1 & (~in2);endmodule三、仿真结果 转载请注明出处&#xff01;