Skip to content

Commit

Permalink
1038 added.
Browse files Browse the repository at this point in the history
  • Loading branch information
liuyubobobo committed May 19, 2019
1 parent c1ca9ac commit 82ffd7d
Show file tree
Hide file tree
Showing 4 changed files with 124 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
cmake_minimum_required(VERSION 3.14)
project(B)

set(CMAKE_CXX_STANDARD 14)

add_executable(B main2.cpp)
65 changes: 65 additions & 0 deletions 1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/// Source : https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/
/// Author : liuyubobobo
/// Time : 2019-05-04

#include <iostream>
#include <vector>

using namespace std;


/// Inorder Traversal and Store all values
/// Time Complexity: O(2n)
/// Space Complexity: O(n)

/// 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 {

private:
int index = 0;

public:
TreeNode* bstToGst(TreeNode* root) {

if(!root) return root;
if(!root->left && !root->right) return root;

vector<int> order;
inorder(root, order);

for(int i = order.size() - 2; i >= 0; i --)
order[i] += order[i + 1];

index = 0;
go(root, order);
return root;
}

private:
void inorder(TreeNode* root, vector<int>& order){

if(root->left) inorder(root->left, order);
order.push_back(root->val);
if(root->right) inorder(root->right, order);
}

void go(TreeNode* root, const vector<int>& order){

if(root->left) go(root->left, order);
root->val = order[index ++];
if(root->right) go(root->right, order);
}
};


int main() {

return 0;
}
52 changes: 52 additions & 0 deletions 1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main2.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/// Source : https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/
/// Author : liuyubobobo
/// Time : 2019-05-19

#include <iostream>
#include <vector>

using namespace std;


/// Inorder Traversal and Change the values during traversal
/// Using a class member pre
///
/// Time Complexity: O(n)
/// Space Complexity: O(h)

/// 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 {

private:
int pre = 0;

public:
TreeNode* bstToGst(TreeNode* root) {

if(!root) return root;

if(root->right)
bstToGst(root->right);

pre += root->val;
root->val = pre;

if(root->left)
bstToGst(root->left);

return root;
}
};


int main() {

return 0;
}
1 change: 1 addition & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -721,4 +721,5 @@ email: [[email protected]](mailto:[email protected])
| 1035 | [Uncrossed Lines](https://leetcode.com/problems/uncrossed-lines/) | [] | [C++](1035-Uncrossed-Lines/cpp-1035/) | | |
| 1036 | [Escape a Large Maze](https://leetcode.com/problems/escape-a-large-maze/) | [] | [C++](1036-Escape-a-Large-Maze/cpp-1036/) | | |
| 1037 | [Valid Boomerang](https://leetcode.com/problems/valid-boomerang/) | [] | [C++](1037-Valid-Boomerang/cpp-1037/) | | |
| 1038 | [Binary Search Tree to Greater Sum Tree](https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/) | [] | [C++](1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/) | | |
| | | | | | |

0 comments on commit 82ffd7d

Please sign in to comment.