leetcode 刷题之路 14 Convert Sorted Array to Binary Search Tree

来源:互联网 发布:java高并发 分布式 编辑:程序博客网 时间:2024/05/18 01:12

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

题目要求将有序数组转换为一个二元查找树。树的题目大部分都可以采用递归来解决,这道题也不例外。一个二元查找树的左子树上的所有节点都小于根节点,右子树上的所有节点都大于根节点,同时二元查找树左子树和右子树上高度尽量接近,能够保证进行查询,插入,删除等操作的时间复杂度接近于O(logn),因此,我们以数组最中间的元素为根节点值,可以使得二元查找树达到平衡状态,然后再用数组的左半边元素和右半边元素分别来递归的建立该根节点的左右子树。

通过上面的讲解,不难写出下面的程序:

my accepted answer:

/** * 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){helper(num, 0, num.size() - 1);}static TreeNode* helper(vector<int> &num, int begin, int end){if (begin > end)return NULL;if (begin == end)return new TreeNode(num[begin]);int mid = (begin + end) / 2;TreeNode *tn = new TreeNode(num[mid]);tn->left = helper(num, begin, mid - 1);tn->right = helper(num, mid + 1, end);return tn;}};




0 0
原创粉丝点击