From 8ede6390a02d828e510c7a4e8148aa28e41fb85a Mon Sep 17 00:00:00 2001 From: Karan Singh <55060123+Karan227@users.noreply.github.com> Date: Tue, 7 Sep 2021 11:17:06 +0530 Subject: [PATCH] Create Unique-Binary-Search-TreesII.cpp --- C++/Unique-Binary-Search-TreesII.cpp | 43 ++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 C++/Unique-Binary-Search-TreesII.cpp diff --git a/C++/Unique-Binary-Search-TreesII.cpp b/C++/Unique-Binary-Search-TreesII.cpp new file mode 100644 index 0000000000..e0de9e2fa2 --- /dev/null +++ b/C++/Unique-Binary-Search-TreesII.cpp @@ -0,0 +1,43 @@ +/** + * 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 generateTrees(int n) + { + vector> dp(n + 1); + dp[0].emplace_back(nullptr); + for (int i = 1; i <= n; i++) + { + for (int j = 1; j <= i; j++) + { + for (auto l : dp[j - 1]) + { + for (auto r : dp[i - j]) { + auto m = new TreeNode(j, l, r); + dp[i].emplace_back(m); + } + } + } + } + function replace = [&] (TreeNode *&p, int val) + { + if (!p) return; + p = new TreeNode(p->val + val, p->left, p->right); + replace(p->left, val); + replace(p->right, p->val); + }; + for (auto &t : dp[n]) + replace(t, 0); + return dp[n]; + } +};