标签:
题目描述:
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