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

news/2024/11/15 7:31:20/

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

耗时:28min48s

C++代码

dfs、二叉树前序遍历、哈希表记录

#include<bits/stdc++.h>
using namespace std;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:map<int,int>hash;bool check(){//检查该路是否符合伪回文数int cnt = 0;for(auto it:hash){if(it.second % 2 != 0) cnt++;if(cnt>1) return false; }return true;}int pseudoPalindromicPaths (TreeNode* root) {if(root == nullptr) return 0;cout<<root->val<<" ";if(!hash.count(root->val)) hash[root->val] = 1;else hash[root->val]++;int left = pseudoPalindromicPaths(root->left);if(root->left == nullptr && root->right == nullptr){//叶子结点int flag = 0;if(check()){flag = 1;}hash[root->val]--;if(hash[root->val]== 0) hash.erase(root->val);return flag;}int right = pseudoPalindromicPaths(root->right);//回溯删除哈希表中的记录hash[root->val]--;if(hash[root->val]== 0) hash.erase(root->val);return left+right;}
};

C为check函数运行时间 n为二叉树结点个数

时间复杂度:O(C*n)

空间复杂度:O(n)

 Python代码

位运算,效率高,奇思妙想

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def pseudoPalindromicPaths (self, root: Optional[TreeNode]) -> int:ans = 0def lowbit(cnt): return cnt & -cntdef dfs(root,cnt):nonlocal ansif not root.left and not root.right:cnt ^= 1 << root.valif cnt == lowbit(cnt):ans += 1returnif root.left:dfs(root.left,cnt^(1<<root.val))if root.right:dfs(root.right,cnt^(1<<root.val))dfs(root,0)return ans


http://www.ppmy.cn/news/1245109.html

相关文章

图书管理系统源码,图书管理系统开发,图书借阅系统源码四TuShuManager应用程序MVC控制器Controllers

Asp.net web应用程序MVC之Controllers控制器 Controller在ASP.NET MVC中负责控制所有客户端与服务器端的交互,并且负责协调Model与View之间的数据传递,是ASP.NET MVC的核心。 撰写Controller的基本要求: 1、Controller必须为公开类别; 2、Controller名称必须以Controller结…

智能优化算法应用:基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于教与学算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.教与学算法4.实验参数设定5.算法结果6.参考文献7.…

为啥网络安全那么缺人,但很多人却找不到工作?

文章目录 一、学校的偏向于学术二、学的东西太基础三、不上班行不行 为什么网络安全的人才缺口那么大&#xff0c;但是大学毕业能找到网安工作的人却很少&#xff0c;就连招聘都没有其他岗位多&#xff1f; 明明央视都说了网络安全的人才缺口还有300多万&#xff0c;现在找不到…

Android frameworks 开发总结之八

Quick Settings增加一項 XXX device要求在quick settings中增加一項touch panel. 在/frameworks/base/packages/SystemUI/res/values/config.xml文件中的quick_settings_tiles_default string 中增加touch panel。並在String resource文件中增加顯示的title <!-- The defau…

DS二叉树--赫夫曼树解码/最优二叉树【数据结构】

DS二叉树–赫夫曼树解码 题目描述 已知赫夫曼编码算法和程序&#xff0c;在此基础上进行赫夫曼解码 可以增加一个函数&#xff1a;int Decode(const string codestr, char txtstr[]);//输入编码串codestr&#xff0c;输出解码串txtstr 该方法如果解码成功则返回1&#xff0c…

串口数据包收发的思路和流程-stm32入门

本节主要内容&#xff1a; 如何去规定一个合理的数据包格式如何收发数据包 1. 数据包格式规定/定义 1.1 HEX 数据包定义 固定包长&#xff0c;含包头包尾 可变包长&#xff0c;含包头包尾 首先数据包的作用是把一个个单独的数据给打包起来&#xff0c;方便我们进行多字节…

卷积神经网络(CNN)车牌识别

文章目录 一、前言二、前期工作1. 设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据3. 查看数据3.数据可视化4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、设置动态学习率五、编译六、训练八、保存和…

Bean基本注解开发

Commponent 使用Component注解代替<bean>标签 <!--注解扫描:扫描指定的基本包及其子包下的类&#xff0c;识别使用了Component注解的文件--><context:component-scan base-package"org.xfy"></context:component-scan> package org.xfy.Dao.…