码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-Convert Sorted Array to Binary Search Tree

时间:2015-05-15 09:12:18      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:

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;
    }
};



leetcode-Convert Sorted Array to Binary Search Tree

标签:

原文地址:http://blog.csdn.net/sinat_24520925/article/details/45727475

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!