class Solution {
public:
TreeNode* dfs(TreeNode* root){
if(root->left) root->left=dfs(root->left);
if(root->right) root->right=dfs(root->right);
if(root->val==0&&!root->left&&!root->right) return nullptr;
return root;
}
TreeNode* pruneTree(TreeNode* root) {
root=dfs(root);
return root;
}
};
剑指 Offer II 048. 序列化与反序列化二叉树
一个简单的写法,深搜版本有空再写
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/TreeNode *p;
class Codec {
private:
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
p = root;
return "";
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
return p;
}
};
// Your Codec object will be instantiated and called as such:
// Codec ser, deser;
// TreeNode* ans = deser.deserialize(ser.serialize(root));
剑指 Offer II 049. 从根节点到叶节点的路径数字之和
深搜求和
class Solution {
public:
int ans=0;
void dfs(TreeNode* root,int cnt){
if(root->left) dfs(root->left,cnt*10+root->val);
if(root->right) dfs(root->right,cnt*10+root->val);
if(!root->left&&!root->right){
ans+=cnt*10+root->val;
}
}
int sumNumbers(TreeNode* root) {
dfs(root,0);
return ans;
}
};