34. 二叉树中和为某一值的路径
/**
* 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>> res;
vector<int> tmp;
vector<vector<int>> 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. 二叉搜索树与双向链表
/*
// Definition for a Node.
class Node {
public:
int val;
Node* left;
Node* right;
Node() {}
Node(int _val) {
val = _val;
left = NULL;
right = NULL;
}
Node(int _val, Node* _left, Node* _right) {
val = _val;
left = _left;
right = _right;
}
};
*/
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大节点
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
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;
};