68 lines
1.6 KiB
C++
68 lines
1.6 KiB
C++
|
#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:
|
||
|
int pseudoPalindromicPaths (TreeNode* root) {
|
||
|
const int length_limit = 1e5;
|
||
|
int state[10]={};
|
||
|
return find(root, state);
|
||
|
}
|
||
|
|
||
|
bool judge_is_permutation(int odd,int even){
|
||
|
if(odd<=1)
|
||
|
return true;
|
||
|
else
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
int find(TreeNode* Node, int* state){
|
||
|
state[Node->val] += 1;
|
||
|
if(Node->left == NULL && Node->right == NULL){
|
||
|
int odd = 0;
|
||
|
int even = 0;
|
||
|
for(int i = 1 ; i <= 9 ;i++){
|
||
|
if(state[i] > 0){
|
||
|
if(state[i]%2)
|
||
|
odd++;
|
||
|
else
|
||
|
even++;
|
||
|
}
|
||
|
}
|
||
|
// for(int i = 1 ;i <=9;i++){
|
||
|
// cout<<state[i]<<' ';
|
||
|
// }
|
||
|
cout<<endl;
|
||
|
if(judge_is_permutation(odd,even)){
|
||
|
state[Node->val]-=1;
|
||
|
return 1;
|
||
|
}
|
||
|
else{
|
||
|
state[Node->val]-=1;
|
||
|
return 0;
|
||
|
}
|
||
|
}
|
||
|
int rlt = 0;
|
||
|
if(Node->left!= NULL){
|
||
|
rlt += find(Node->left,state);
|
||
|
}
|
||
|
if(Node->right!= NULL){
|
||
|
rlt += find(Node->right,state);
|
||
|
}
|
||
|
state[Node->val]-=1;
|
||
|
return rlt;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
int main(){
|
||
|
return 0;
|
||
|
}
|