From 82ffd7dda4d0e4314f7f0712e8563a9736131546 Mon Sep 17 00:00:00 2001 From: Yubo Liu Date: Sun, 19 May 2019 01:41:29 -0700 Subject: [PATCH] 1038 added. --- .../cpp-1038/CMakeLists.txt | 6 ++ .../cpp-1038/main.cpp | 65 +++++++++++++++++++ .../cpp-1038/main2.cpp | 52 +++++++++++++++ readme.md | 1 + 4 files changed, 124 insertions(+) create mode 100644 1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/CMakeLists.txt create mode 100644 1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main.cpp create mode 100644 1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main2.cpp diff --git a/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/CMakeLists.txt b/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/CMakeLists.txt new file mode 100644 index 00000000..7f3bfb51 --- /dev/null +++ b/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.14) +project(B) + +set(CMAKE_CXX_STANDARD 14) + +add_executable(B main2.cpp) \ No newline at end of file diff --git a/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main.cpp b/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main.cpp new file mode 100644 index 00000000..04ba8562 --- /dev/null +++ b/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main.cpp @@ -0,0 +1,65 @@ +/// Source : https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/ +/// Author : liuyubobobo +/// Time : 2019-05-04 + +#include +#include + +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 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& 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& order){ + + if(root->left) go(root->left, order); + root->val = order[index ++]; + if(root->right) go(root->right, order); + } +}; + + +int main() { + + return 0; +} \ No newline at end of file diff --git a/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main2.cpp b/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main2.cpp new file mode 100644 index 00000000..328025ea --- /dev/null +++ b/1038-Binary-Search-Tree-to-Greater-Sum-Tree/cpp-1038/main2.cpp @@ -0,0 +1,52 @@ +/// Source : https://leetcode.com/problems/binary-search-tree-to-greater-sum-tree/ +/// Author : liuyubobobo +/// Time : 2019-05-19 + +#include +#include + +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; +} \ No newline at end of file diff --git a/readme.md b/readme.md index 38a7bac9..0166b165 100644 --- a/readme.md +++ b/readme.md @@ -721,4 +721,5 @@ email: [liuyubobobo@gmail.com](mailto:liuyubobobo@gmail.com) | 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/) | | | | | | | | | | \ No newline at end of file