leetcode 108

二分法建立二叉树,每次把左半部分作为左子树右半部分作为右子树,递归建立BST。

#include<bits/stdc++.h>
using namespace std;
/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
	void makeBST(TreeNode* &root, vector<int>& nums, int m, int n)//以root为根节点用nums数组中从m,到n序列二分建立二叉树
	{
		if (m>n)
		{
			return;
		}
		int t = (m + n) / 2;
		if (root == NULL)
		{
			root = new TreeNode(nums[t]);
			root->left = NULL;
			root->right = NULL;
			makeBST(root->left, nums, m, t - 1);
			makeBST(root->right, nums, t + 1, n);
		}
		return;
	}
public:
	TreeNode* sortedArrayToBST(vector<int>& nums) {
		int n;
		n = nums.size();
		if (n == 0)
			return NULL;
		sort(nums.begin(), nums.end());
		TreeNode* root=NULL;
		makeBST(root, nums, 0, n - 1);
		return root;
	}
};

  

猜你喜欢

转载自www.cnblogs.com/legendcong/p/9433905.html
今日推荐