当前位置:网站首页>Leetcode force buckle (Sword finger offer 36-39) 36 Binary search tree and bidirectional linked list 37 Serialize binary tree 38 Arrangement of strings 39 Numbers that appear more than half of the tim
Leetcode force buckle (Sword finger offer 36-39) 36 Binary search tree and bidirectional linked list 37 Serialize binary tree 38 Arrangement of strings 39 Numbers that appear more than half of the tim
2022-07-07 19:57:00 【Wood White CPP】
The finger of the sword Offer 36. Binary search tree and double linked list
Answer key :
The idea is simple , It is a medium order traversal , Connect nodes while traversing .
Code :
class Solution {
public:
Node *pre,*head;
void dfs(Node* root){
if(root==nullptr) return;
dfs(root->left);
if(pre==nullptr) head=root;// This is a header node
else
pre->right=root;
root->left=pre;
pre=root;
dfs(root->right);
}
Node* treeToDoublyList(Node* root) {
if(root == nullptr) return root;
dfs(root);
head->left=pre;
pre->right=head;
return head;
}
};
result :
The finger of the sword Offer 37. Serialize binary tree
Answer key :
Serialization generally adopts pre order , Middle preface , In the following order , Here we use the preface .
serialize , Use preorder traversal to save the nodes of the binary tree into a string , Between each node ’,‘ separate . It is worth noting that , In the process of traversal, we need to treat the binary tree as a full binary tree , Blank nodes with ’null‘ Express .
Deserialization , Put the string in the queue que in , use ’,‘ Judge and push into the queue . Traverse through the preamble , While traversing the preorder, establish a binary tree node .
Code :
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
if(root==nullptr) return "null,";
string str=to_string(root->val)+',' ;
str+=serialize(root->left);
str+=serialize(root->right);
return str;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
queue<string> que;
string str;
for(auto i:data){
if(i==','){
que.push(str);
str.clear();
}
else
str.push_back(i);
}
return rdeserialize(que);
}
TreeNode* rdeserialize(queue<string> &que){
if (que.front() == "null") {
que.pop();
return nullptr;
}
TreeNode* root = new TreeNode(stoi(que.front()));
que.pop();
root->left = rdeserialize(que);
root->right = rdeserialize(que);
return root;
}
};
result :
The finger of the sword Offer 38. Arrangement of strings
Answer key :
The key is to repeat , Because there are repeated characters . You can use a flag bit , Judge whether the current character appears in the previous string .
Code :
class Solution {
public:
vector<string> res;
void dfs(string &s,int sz,int pos){
if(pos==sz) res.push_back(s);
for(int i=pos;i<sz;++i){
bool flag=true;
for(int j=pos;j<i;++j){
if(s[j]==s[i]) flag=false;
}
if(flag){
swap(s[i],s[pos]);
dfs(s,sz,pos+1);
swap(s[i],s[pos]);
}
}
}
vector<string> permutation(string s) {
dfs(s,s.size(),0);
return res;
}
};
result :
The finger of the sword Offer 39. A number that appears more than half the times in an array
There is a number in an array that appears more than half the length of the array , Please find out the number .
You can assume that the array is not empty , And there are always many elements in a given array .
Answer key :
Method 1 : Sort
If there are more than half of the repeated characters , After sorting, it must be in the middle of the array .
Code :
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
result :
Method 2 : Hash
Store with hash , Once the value is greater than half the length of the array, the value is returned .
Code :
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int>map;
for(auto i:nums){
++map[i];
if(map[i]>nums.size()/2) return i;
}
return -1;
}
};
result :
边栏推荐
- Empowering smart power construction | Kirin Xin'an high availability cluster management system to ensure the continuity of users' key businesses
- 多个线程之间如何协同
- Automatic classification of defective photovoltaic module cells in electroluminescence images-論文閱讀筆記
- R语言使用ggplot2函数可视化需要构建泊松回归模型的计数目标变量的直方图分布并分析构建泊松回归模型的可行性
- Navicat连接2002 - Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘解决
- Semantic SLAM源码解析
- LeetCode 515(C#)
- openEuler 资源利用率提升之道 01:概论
- tp6 实现佣金排行榜
- IP tools
猜你喜欢
PMP practice once a day | don't get lost in the exam -7.7
PMP對工作有益嗎?怎麼選擇靠譜平臺讓備考更省心省力!!!
Detailed explanation of Flink parallelism and slot
论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
杰理之相同声道的耳机不允许配对【篇】
Welcome to the markdown editor
648. 单词替换
杰理之关于 TWS 配对方式配置【篇】
ASP.NET幼儿园连锁管理系统源码
【RT-Thread env 工具安装】
随机推荐
杰理之相同声道的耳机不允许配对【篇】
ASP.NET体育馆综合会员管理系统源码,免费分享
2022.07.04
谷歌seo外链Backlinks研究工具推荐
mock.js从对象数组中任选数据返回一个数组
Compiler optimization (4): inductive variables
开源OA开发平台:合同管理使用手册
How to buy bank financial products? Do you need a bank card?
Responsibility chain model - unity
openEuler 有奖捉虫活动,来参与一下?
转置卷积理论解释(输入输出大小分析)
国家网信办公布《数据出境安全评估办法》:累计向境外提供10万人信息需申报
IP tools
841. 字符串哈希
最多可以参加的会议数目[贪心 + 优先队列]
The project manager's "eight interview questions" is equal to a meeting
Ways to improve the utilization of openeuler resources 01: Introduction
杰理之关于 TWS 配对方式配置【篇】
ASP. Net gymnasium integrated member management system source code, free sharing
tp6 实现佣金排行榜