leetcode-Convert Sorted Array to Binary Search Tree

来源:互联网 发布:天庭淘宝城txt全集下载 编辑:程序博客网 时间:2024/04/28 01:25

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

只要把数组中点的元素左边和右边的元素分开,把中点当做子树根节点,左边的元素是根节点左子树的节点,右边的元素是右子树的节点,递归操作即可。

/** * Definition for binary tree * 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) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        TreeNode *root = sortedArrayToBST(num, 0, num.size());                return root;    }private:    TreeNode *sortedArrayToBST(vector<int> &num, int begin, int end) {        if (begin >= end)            return NULL;                    int middle = (begin + end) >> 1;             TreeNode *root = new TreeNode(num[middle]);                root->left = sortedArrayToBST(num, begin, middle);                root->right = sortedArrayToBST(num, middle+1, end);                return root;    }};

其实begin+end可能会超出int范围造成溢出,《编程之美》上也有说到。改成如下:

要注意的是算术操作符的优先级大于移位操作符.

/** * Definition for binary tree * 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) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        TreeNode *root = sortedArrayToBST(num, 0, num.size());                return root;    }private:    TreeNode *sortedArrayToBST(vector<int> &num, int begin, int end) {        if (begin >= end)            return NULL;                    int middle = begin + ((end - begin) >> 1);             TreeNode *root = new TreeNode(num[middle]);                root->left = sortedArrayToBST(num, begin, middle);                root->right = sortedArrayToBST(num, middle+1, end);                return root;    }};


原创粉丝点击