Convert Sorted Array to Binary Search Tree - LeetCode
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
思路:分治。将当前区间的中点给当前node,然后左区间中点为left,右区间中点为right。
以下为AC代码。但我有一点不明白,fineNodes函数中,如果node的声明语句写成TreeNode node(nums[mid])然后函数最后返回&node就会出错,LeetCode上提示Runtime Error,但我本地运行是好用的。现在还没想明白这两种方法有什么区别。
更新:出错的原因是因为这样定义的node对象在函数结束时就会被从内存中注销掉,不能再访问,因此会Runtime Error。但是通过new语句动态申请的内存,必需显式用delete语句释放内存才可以,因此这个程序中在函数结束后依然可以正确地访问。
1 class Solution { 2 public: 3 TreeNode* fineNodes(vector<int>& nums, int leftInd, int rightInd) 4 { 5 if (leftInd > rightInd) return NULL; 6 int mid = (leftInd + rightInd) >> 1; 7 TreeNode *node = new TreeNode(nums[mid]); 8 node->right = fineNodes(nums, mid + 1, rightInd); 9 node->left = fineNodes(nums, leftInd, mid - 1); 10 return node; 11 } 12 TreeNode* sortedArrayToBST(vector<int>& nums) { 13 return fineNodes(nums, 0, nums.size() - 1); 14 } 15 };