持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
剑指 Offer II 050. 向下的路径节点之和
思路:
代码:
class Solution {
public:
int rootSum(TreeNode* root, int targetSum) {
if (!root) {
return 0;
}
int ret = 0;
if (root->val == targetSum) {
ret++;
}
ret += rootSum(root->left, targetSum - root->val);
ret += rootSum(root->right, targetSum - root->val);
return ret;
}
int pathSum(TreeNode* root, int targetSum) {
if (!root) {
return 0;
}
int ret = rootSum(root, targetSum);
ret += pathSum(root->left, targetSum);
ret += pathSum(root->right, targetSum);
return ret;
}
};
剑指 Offer II 044. 二叉树每层的最大值
思路:
代码:
class Solution {
public:
vector<int>ret;
queue<TreeNode*>que;
vector<int> largestValues(TreeNode* root) {
if (root == nullptr) return ret;
que.push(root);
while (!que.empty()) {
int size = que.size();
int ans = INT_MIN;
for (int i = 0; i < size; i++) {
TreeNode*s = que.front();
que.pop();
ans = max(ans, s->val);
if (s->left) {
que.push(s->left);
}
if (s->right) {
que.push(s->right);
}
}
ret.push_back(ans);
}return ret;
}
};
515. 在每个树行中找最大值
思路:
代码:
class Solution {
public:
vector<int>ret;
queue<TreeNode*>que;
vector<int> largestValues(TreeNode* root) {
if (root == nullptr) return ret;
que.push(root);
while (!que.empty()) {
int size = que.size();
int ans = INT_MIN;
for (int i = 0; i < size; i++) {
TreeNode*s = que.front();
que.pop();
ans = max(ans, s->val);
if (s->left) {
que.push(s->left);
}
if (s->right) {
que.push(s->right);
}
}
ret.push_back(ans);
}return ret;
}
};
剑指 Offer II 046. 二叉树的右侧视图
思路:
代码:
class Solution {
public:
queue<TreeNode*>que;
vector<int>ret;
vector<int> rightSideView(TreeNode* root) {
if (root == nullptr) return ret;
que.push(root);
while (!que.empty()) {
int size = que.size();
for (int i = 0; i < size ; i++) {
TreeNode* s = que.front();
que.pop();
if (i == size - 1) {
ret.push_back(s->val);
}
if (s->left) {
que.push(s->left);
}
if (s->right) {
que.push(s->right);
}
}
}
return ret;
}
};
剑指 Offer II 056. 二叉搜索树中两个节点之和
思路:
代码:
class Solution {
public:
unordered_set<int> hashtable;
bool findTarget(TreeNode* root, int k) {
if (root == nullptr) return false;
if (hashtable.count(k - root->val)) {
return true;
}
hashtable.insert(root->val);
return findTarget(root->left, k) || findTarget(root->right, k);
}
};
之于如此了,二叉树做了大约20多天吧,每天都在做树,我都快成树了,说实话,我现在肯定还是对一些树的题目不太会,害,止步于此了,做的我都快哭了。