class Solution {
public:
vector> res;
vector tmp;
vector> pathSum(TreeNode* root, int target) {
if(!root){
return res;
}else
{
dfs(root, target);
}
return res;
}
void dfs(TreeNode* node, int target)
{
target -= node->val;
tmp.push_back(node->val);
if(node->left != nullptr){
dfs(node->left, target);
}
if(node->right != nullptr){
dfs(node->right, target);
}
if(node->left == nullptr && node->right == nullptr && target == 0){
res.push_back(tmp);
}
tmp.pop_back();
}
};
36. 二叉搜索树与双向链表
class Solution {
public:
Node* treeToDoublyList(Node* root) {
if(root == nullptr)
{
return nullptr;
}
inorder(root);
head->left = pre;
pre->right = head;
return head;
}
private:
Node *pre, *head;
void inorder(Node* cur)
{
if(cur == nullptr){
return;
}
inorder(cur->left);
if(pre != nullptr)
{
pre->right = cur;
}
else
{
head = cur;
}
cur->left = pre;
pre = cur;
inorder(cur->right);
}
};
54. 二叉搜索树的第K大节点
class Solution {
public:
int kthLargest(TreeNode* root, int k) {
inorder(root, k);
return res;
}
void inorder(TreeNode* root, int& k)
{
if(root == nullptr)
{
return;
}
inorder(root->right, k);
if(k == 0){
return;
}
if(--k == 0){
res = root->val;
}
inorder(root->left, k);
}
private:
int res;
};



