剑指 Offer 34. 二叉树中和为某一值的路径
题目描述:剑指 Offer 34. 二叉树中和为某一值的路径
题解思路:面试题34. 二叉树中和为某一值的路径(回溯法,清晰图解)
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
vector<vector<int>> pathSum(TreeNode* root, int target) {
dfs(root, target);
return result;
}
void dfs(TreeNode * root, int tar){
if(root == nullptr){
return;
}
temp.push_back(root->val);
tar -= root->val;
if(tar == 0 && root->left == nullptr && root->right == nullptr){
result.push_back(temp);
}
dfs(root->right, tar);
dfs(root->left, tar);
temp.pop_back();
}
};
剑指 Offer 36. 二叉搜索树与双向链表
题目描述:剑指 Offer 36. 二叉搜索树与双向链表
题解思路:剑指 Offer 36. 二叉搜索树与双向链表(中序遍历,清晰图解)
class Solution {
public:
Node * head, * cur, * pre;
Node* treeToDoublyList(Node* root) {
if(root == nullptr)return root;
dfs(root);
head->left = pre;
pre->right = head;
return head;
}
void dfs(Node * root){
if(root == nullptr)return;
dfs(root->left);
cur = root;
if(pre != nullptr){
pre->right = cur;
}else{
head = cur;
}
cur->left = pre;
pre = cur;
dfs(root->right);
}
};
剑指 Offer 54. 二叉搜索树的第k大节点
class Solution {
public:
int kthLargest(TreeNode* root, int k) {
stack<TreeNode*> s;
vector<int> v;
TreeNode * cur = root;
while(cur != nullptr || !s.empty()){
if(cur != nullptr){
s.push(cur);
cur = cur->left;
}else{
cur = s.top();
v.push_back(cur->val);
s.pop();
cur = cur->right;
}
}
int size = v.size();
return v[size - k];
}
};