当前位置:网站首页>剑指offer专项突击版第16天
剑指offer专项突击版第16天
2022-08-01 02:38:00 【hys__handsome】
剑指 Offer II 047. 二叉树剪枝
简单的dfs深搜回溯来遍历树,比较直观的写法
class Solution {
public:
bool dfs(TreeNode* &root) {
if(root == nullptr) return true;
bool flag1 = dfs(root->left);
bool flag2 = dfs(root->right);
if(flag1) root->left = nullptr;
if(flag2) root->right = nullptr;
if(root->val == 0 && flag1 && flag2)
return true;
else
return false;
}
TreeNode* pruneTree(TreeNode* root) {
if(dfs(root)) root = nullptr;
return root;
}
};
更简洁的写法
class Solution {
public:
TreeNode* pruneTree(TreeNode* root) {
if (!root) {
return nullptr;
}
root->left = pruneTree(root->left);
root->right = pruneTree(root->right);
if (!root->left && !root->right && !root->val) {
return nullptr;
}
return root;
}
};
方法一:通过dfs深度优先来遍历树,然后例如下图的树生成的字符串为:1,2,N,N,3,4,N,N,5,N,N,
然后按照规律去解码即可,其中N代表空结点。
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
if(root == nullptr) return "N,";
else {
string node = to_string(root->val) + ','
+ serialize(root->left)
+ serialize(root->right);
return node;
}
}
TreeNode* rdeserialize(queue<string> &que) {
string str = que.front();
que.pop();
if(str == "N") return nullptr;
else {
TreeNode *root = new TreeNode(stoi(str));
root->left = que.size()? rdeserialize(que): nullptr;
root->right = que.size()? rdeserialize(que): nullptr;
return root;
}
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
queue<string> que;
string tmp;
for(char c: data) {
if(c == ',') {
que.emplace(tmp);
tmp.clear();
} else {
tmp.push_back(c);
}
}
if(que.size()) return rdeserialize(que);
else return nullptr;
}
};
方法二:括号表示编码 + 递归下降解码
链接:https://leetcode.cn/problems/h54YBf/solution/xu-lie-hua-yu-fan-xu-lie-hua-er-cha-shu-dh5vl/
剑指 Offer II 049. 从根节点到叶节点的路径数字之和
本质上是求根节点到叶子结点路径上结点的序列。
class Solution {
public:
int get_sum(TreeNode* root, int val) {
if(!root->left && !root->right) //叶子结点
return val * 10 + root->val;
int sum = 0;
if(root->left) sum += get_sum(root->left, val * 10 + root->val);
if(root->right) sum += get_sum(root->right, val * 10 + root->val);
return sum;
}
int sumNumbers(TreeNode* root) {
return get_sum(root,0);
}
};
边栏推荐
猜你喜欢

ECCV2022 Workshop | Multi-Object Tracking and Segmentation in Complex Environments

Basic implementation of vector

MYSQL-Batch insert data

这个地图绘制工具太赞了,推荐~~

Modern Enterprise Architecture Framework 1

项目越写越大,我是这样做拆分的
![ROS2 series of knowledge (4): understand the concept of [service]](/img/14/8de92a89d9c4b6476ac37408bc7788.png)
ROS2 series of knowledge (4): understand the concept of [service]

树莓派 的 arm 版的 gcc 安装 和环境变量的配置
![leetcode: 1562. Find latest grouping of size M [simulation + endpoint record + range merge]](/img/72/f52b5d3dcdb271f096c3e5108f0042.png)
leetcode: 1562. Find latest grouping of size M [simulation + endpoint record + range merge]

IDEA modifies the annotation font
随机推荐
device node结构体转换成platform_device结构体
MYSQL master-slave replication
HCIP (14)
MYSQL logical architecture
【历史上的今天】7 月 31 日:“缸中之脑”的提出者诞生;Wi-Fi 之父出生;USB 3.1 标准发布
【搜索专题】看完必会的BFS解决最短路问题攻略
Basic usage concepts of vim
Ordinary users cannot access HGFS directory
LeetCode每日一练 —— 环形链表问题(面试四连问)
情人节浪漫3D照片墙【附源码】
When opening a MYSQL table, some can display editing, some do not, how to set.
leetcode:1648. 销售价值减少的颜色球【二分找边界】
带wiringPi库在unbutu 编译 并且在树莓派运行
Summary of MVCC
修改Postman安装路径
普通用户无法访问hgfs目录
测试
The kernel of the decompression process steps
Flink deploys and submits jobs
在打开MYSQL表时,有的可以显示编辑,有的没有,如何设置。