leetcode-Convert Sorted Array to Binary Search Tree

来源:互联网 发布:天庭淘宝店 宁小北txt 编辑:程序博客网 时间:2024/06/05 15:30

题目描述:

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

即给定一个升序排列的数组,现在将它转换成一个平衡二叉树。

解题思路;

数组排好序,相当于我们最后生成的平衡二叉树,其根节点为数组中间节点,左子树的根节点为前半部分的中间节点,右子树的根节点为后半部分的中间节点,相当于一个二分查找,找到一部分的中间节点就插入,缩短搜索区域,直到此区域中只有一个节点为止。

方法一:

递归代码如下:

class Solution {public:    TreeNode* sortedArrayToBST(vector<int>& nums) {        if(nums.size()==0) return NULL;        int mid=nums.size()/2;        TreeNode* root=(TreeNode*) malloc(sizeof(TreeNode));        root->val=nums[mid];        if(nums.size()==1)        {            root->left=NULL;            root->right=NULL;            return root;        }        vector<int> leftnum(nums.begin(),nums.begin()+mid);        vector<int> rightnum(nums.begin()+mid+1,nums.end());        root->left=sortedArrayToBST(leftnum);        root->right=sortedArrayToBST(rightnum);                return root;    }};

方法二;

利用两个数组,只采用一个函数的方法:

class Solution {public:    TreeNode* sortedArrayToBST(vector<int>& nums) {        if(nums.size()==0) return NULL;        int mid=nums.size()/2;        TreeNode* root=(TreeNode*) malloc(sizeof(TreeNode));        root->val=nums[mid];        if(nums.size()==1)        {            root->left=NULL;            root->right=NULL;            return root;        }        vector<int> leftnum(nums.begin(),nums.begin()+mid);        vector<int> rightnum(nums.begin()+mid+1,nums.end());        root->left=sortedArrayToBST(leftnum);        root->right=sortedArrayToBST(rightnum);                return root;    }};



0 0
原创粉丝点击