【LeetCode】Convert Sorted Array to Binary Search Tree

来源:互联网 发布:java打包成jar包 cmd 编辑:程序博客网 时间:2024/06/06 02:55

题目描述:

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

将一个排序好的数组转化为平衡的搜索二叉树。

思路就是不断二分。l表示区间左端点index,r表示右端点,中间点为l+(r-l+1)/2,通过中间点划分出来的两个区间为下次递归的左右端点,分别为[l , (r+l-1)/2],[(r+l+3)/2, r],左右孩子分别为(r+3l+1)/4, (3r+l+5)/4。

代码如下:

struct TreeNode {    int val;    TreeNode *left;    TreeNode *right;    TreeNode(int x) : val(x), left(NULL), right(NULL) {}};class Solution {public:TreeNode *sortedArrayToBST(vector<int> &num) {if (num.empty())return NULL;TreeNode *node = new TreeNode(num[num.size() / 2]);changeToBST(num, node, 0, num.size() - 1);return node;}void changeToBST(vector<int> &num, TreeNode *node, int l, int r){if (l >= r)return;TreeNode *left(NULL), *right(NULL);if ((r + 3 * l + 1) / 4 >= l)left = new TreeNode(num[((r + 3 * l + 1) / 4)]);if ((3 * r + l + 5) / 4 <= r)right = new TreeNode(num[((3 * r + l + 5) / 4)]);node->left = left;node->right = right;changeToBST(num, node->left, l, (r + l - 1) / 2);changeToBST(num, node->right, (r + l + 3) / 2, r);}};


0 0
原创粉丝点击