标签:private 操作 com nullptr str efi ++ nod roo
今天继续刷leetcode。
今天着重练习了一下回文串(Palindromic string)相关的题目,其中做到1457. Pseudo-Palindromic Paths in a Binary Tree这一道题的时候,自己方法没错,但跑了两次都是TLE,然后心态有点崩,就去看了一下别人的代码,发现我和别人思路基本一样,怎么我的就不行。
我一开始的解法如下:
/**
* 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:
int pseudoPalindromicPaths(TreeNode* root) {
vector<int> out;
int res = 0;
searchBT(root, out, res);
return res;
}
void searchBT(TreeNode* root, vector<int>& out, int& res) {
if (root) {
out.push_back(root->val);
if (root->left == nullptr && root->right == nullptr) {
vector<int> cnt(10, 0);
for(auto e : out) cnt[e]++;
int odd = 0;
for(auto e : cnt){
if(e%2 != 0){
odd++;
if(odd > 1) break;
}
}
if(odd <= 1) res++;
}
else {
searchBT(root->left, out, res);
searchBT(root->right, out, res);
}
out.pop_back();
}
}
};
思路也没啥好讲的,就是用dfs寻找所有的路径,然后判断每一条路径是否符合条件。
这个代码在一个非常长的测试用例上超时了。
后面我在评论区看了一下别人的代码,把它改成下面这样就能通过了。
/**
* 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:
int pseudoPalindromicPaths(TreeNode* root) {
searchBT(root);
return res;
}
void searchBT(TreeNode* root) {
if (root) {
cnt[root->val]++;
if (root->left == nullptr && root->right == nullptr) {
int odd = 0;
for(auto e : cnt){
if(e.second % 2 != 0){
odd++;
if(odd > 1) break;
}
}
if(odd <= 1) res++;
}
else {
searchBT(root->left);
searchBT(root->right);
}
cnt[root->val]--;
}
}
private:
int res = 0;
map<int, int> cnt;
};
看起来基本一样,我原来的是dfs到叶子的时候再去判断路径是不是合理,所以我中途把这条路径存在一个vector里面了,后面是直接存在一个map里面的,就这点多余的操作竟然会超时,我也是服了。
1457. Pseudo-Palindromic Paths in a Binary Tree
标签:private 操作 com nullptr str efi ++ nod roo
原文地址:https://www.cnblogs.com/njuxjx/p/14238309.html