47)二叉树剪枝
class Solution {
public:
TreeNode* pruneTree(TreeNode* root) {
if(root->left) root->left = pruneTree(root->left);
if(root->right) root->right = pruneTree(root->right);
if(root->left==nullptr && root->right==nullptr && root->val == 0) return nullptr;
return root;
}
};
48)序列化与反序列化二叉树
class Codec {
public:
TreeNode* next_node(stringstream& ss){
string tmp;
ss >> tmp;
if(tmp[0] == 'x') return nullptr;
else return new TreeNode(stoi(tmp));
}
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
string res;
auto cur = root;
stack<TreeNode*> s;
while(cur!=nullptr || !s.empty()){
while(cur!=nullptr){
res += to_string(cur->val);
res.push_back(' ');
s.push(cur);
cur = cur->left;
}
res.push_back('x');
res.push_back(' ');
cur = s.top(); s.pop();
cur = cur->right;
}
res.push_back('x');
res.push_back(' ');
cout << res << endl;
return res;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
stringstream ss(data);
TreeNode* root = next_node(ss);
TreeNode* cur = root;
stack<TreeNode*> s;
while(cur!=nullptr || !s.empty()){
while(cur!=nullptr){
s.push(cur);
cur = cur->left = next_node(ss);
}
cur = s.top(); s.pop();
cur = cur->right = next_node(ss);
}
return root;
}
};
49)从根节点到叶节点的路径数字之和
class Solution{
public:
int sumNumbers(TreeNode* root){
return dfs(root, 0);
}
int dfs(TreeNode* root, int presum){
if(!root) return 0;
int sum = presum*10 + root->val;
if(root->left || root->right){
return dfs(root->left, sum)+dfs(root->right, sum);
}else return sum;
}
};
|