From c00076fa29f8d0359fb01bd4d2dd31047807a419 Mon Sep 17 00:00:00 2001 From: SquidSpirit Date: Thu, 6 Mar 2025 00:10:09 +0800 Subject: [PATCH] feat: 108_conver_sorted_array_to_binary_search_tree --- .../main.cpp | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 108_convert_sorted_array_to_binary_search_tree/main.cpp diff --git a/108_convert_sorted_array_to_binary_search_tree/main.cpp b/108_convert_sorted_array_to_binary_search_tree/main.cpp new file mode 100644 index 0000000..db0f227 --- /dev/null +++ b/108_convert_sorted_array_to_binary_search_tree/main.cpp @@ -0,0 +1,41 @@ +#include +using namespace std; + +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: + TreeNode *sortedArrayToBST(vector &nums) { + TreeNode *root = new TreeNode(); + appendArrayToNode(nums, root); + return root; + } + + void appendArrayToNode(vector &nums, TreeNode *root) { + int mid = nums.size() / 2; + root->val = nums[mid]; + + if (nums.size() == 1) return; + + vector leftNums, rightNums; + copy(nums.begin(), nums.begin() + mid, back_inserter(leftNums)); + copy(nums.begin() + mid + 1, nums.end(), back_inserter(rightNums)); + + if (!leftNums.empty()) { + root->left = new TreeNode(); + appendArrayToNode(leftNums, root->left); + } + + if (!rightNums.empty()) { + root->right = new TreeNode(); + appendArrayToNode(rightNums, root->right); + } + } +}; \ No newline at end of file