题目来源:力扣《剑指Offer》第二版
完成时间:2022/08/08
34. 二叉树中和为某一值的路径
题目链接:剑指 Offer 34. 二叉树中和为某一值的路径 - 力扣(LeetCode)
我的题解
这题用深搜就行了,套模板的题目
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<vector<int>> result;
vector<int> res;
int sum = 0;
void traverse(TreeNode* node, int target) {
sum += node->val;
res.push_back(node->val);
if(sum == target && node->left == nullptr && node->right == nullptr){
result.push_back(res);
}
if(node->left){
traverse(node->left,target);
}
if(node->right){
traverse(node->right,target);
}
sum -= node->val;
res.pop_back();
}
vector<vector<int>> pathSum(TreeNode* root, int target) {
if(root != nullptr)
traverse(root,target);
return result;
}
};
33. 二叉搜索树的后序遍历序列
题目链接:剑指 Offer 33. 二叉搜索树的后序遍历序列 - 力扣(LeetCode)
我的题解
这题可以借鉴由中序遍历和前(后)序遍历得出二叉树来做。因为有后续遍历的序列,那么最尾的元素一定是子树根节点,又是二叉搜索树,则可以分成两部分,前一部分是左子树比根节点小,后部分是右子树比根节点大。只需要验证后部分是否都比根节点小即可。
class Solution {
public:
bool verifyPostorder(vector<int>& postorder) {
if(postorder.size() == 0) return true;
int root = postorder[postorder.size()-1];
int i = 0;
while(postorder[i] < root){
i++;
}
postorder.pop_back();
if(postorder.size() != 0){
vector<int> rightorder(postorder.begin(),postorder.begin() + i);
vector<int> leftorder(postorder.begin() + i,postorder.end());
for(;i < postorder.size();i++){
if(postorder[i] < root){
return false;
}
}
return verifyPostorder(rightorder) && verifyPostorder(leftorder);
}else{
return true;
}
}
};