108. 将有序数组转换为二叉搜索树
108. 将有序数组转换为二叉搜索树
给你一个整数数组
nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
示例 1:
输入:nums = [-10,-3,0,5,9] 输出:[0,-3,9,-10,null,5] 解释:[0,-10,5,null,-3,null,9] 也将被视为正确答案:
示例 2:
输入:nums = [1,3] 输出:[3,1] 解释:[1,null,3] 和 [3,1] 都是高度平衡二叉搜索树。
提示:
1 <= nums.length <= 104-104 <= nums[i] <= 104nums按 严格递增 顺序排列
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 /** 7 Definition for a binary tree node. 8 */ 9 struct TreeNode { 10 int val; 11 TreeNode *left; 12 TreeNode *right; 13 TreeNode() : val(0), left(nullptr), right(nullptr) {} 14 TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} 15 TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} 16 }; 17 18 class Solution { 19 public: 20 TreeNode *helper(vector<int> nums, int first, int last) { 21 if (first > last) { 22 return nullptr; 23 } 24 // 到达叶子节点 25 if (first == last) { 26 TreeNode *parrent = new TreeNode(nums[first]); 27 return parrent; 28 } 29 int mid = first + (last - first) / 2; 30 TreeNode *leftChildNode = helper(nums, first, mid - 1); 31 TreeNode *rightChildNode = helper(nums, mid + 1, last); 32 TreeNode *parrent = new TreeNode(nums[mid]); 33 parrent->left = leftChildNode; 34 parrent->right = rightChildNode; 35 return parrent; 36 } 37 TreeNode* sortedArrayToBST(vector<int>& nums) { 38 if (nums.size() == 0) { 39 return nullptr; 40 } 41 if (nums.size() == 1) { 42 TreeNode *parrent = new TreeNode(nums[0]); 43 return parrent; 44 } 45 int first = 0; 46 int last = (int)nums.size() - 1; 47 return helper(nums, first, last); 48 } 49 50 void midOrderPrintTree(TreeNode *root) { 51 if (root == nullptr) { 52 return; 53 } 54 midOrderPrintTree(root->left); 55 cout << root->val << " "; 56 midOrderPrintTree(root->right); 57 return; 58 } 59 void preOrderPrintTree(TreeNode *root) { 60 if (root == nullptr) { 61 return; 62 } 63 cout << root->val << " "; 64 preOrderPrintTree(root->left); 65 preOrderPrintTree(root->right); 66 return; 67 } 68 void postOrderPrintTree(TreeNode *root) { 69 if (root == nullptr) { 70 return; 71 } 72 postOrderPrintTree(root->left); 73 postOrderPrintTree(root->right); 74 cout << root->val << " "; 75 return; 76 } 77 }; 78 int main() 79 { 80 vector<int> nums = {-10, -3, 0, 5, 9}; 81 Solution *test = new Solution(); 82 TreeNode *root = test->sortedArrayToBST(nums); 83 cout << "preOrder print Tree:" << endl; 84 test->preOrderPrintTree(root); 85 cout << endl; 86 87 cout << "midOrder print Tree:" << endl; 88 test->midOrderPrintTree(root); 89 cout << endl; 90 91 cout << "postOrder print Tree:" << endl; 92 test->postOrderPrintTree(root); 93 cout << endl; 94 system("pause"); 95 return 0; 96 }
测试结果:

浙公网安备 33010602011771号