108. Convert Sorted Array to Binary Search Tree [leetcode]
题意:
Given an array where elements are sorted in ascending order, convert it to a height balanced BST.
Subscribe to see which companies asked this question
思路:
这道题开始想把这棵树建立好,然后在相应的位置填上适当的数。 后来发现这两部能归并到一步。
建树的时候利用标号k的子节点的标号为2*k, 2*k+1.
同时发现最后的BST就是二叉树中序遍历的结果。
因此,把建树和中序遍历结合在一起。
AC代码:
/** * 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 { public: void dfs(TreeNode * root, int k, int & now, int n, vector<int> & nums) { if(k > n) return ; if(2*k <= n) { TreeNode *ptr = new TreeNode(nums[2*k-1]); root->left = ptr; dfs(root->left, 2*k, now, n, nums); } root->val = nums[now]; now += 1; if(2*k+1 <= n) { TreeNode *ptr = new TreeNode(nums[2*k]); root->right = ptr; dfs(root->right, 2*k+1, now, n, nums); } } TreeNode* sortedArrayToBST(vector<int>& nums) { if(nums.size() == 0) return NULL; TreeNode * root = new TreeNode(1); int now = 0; dfs(root, 1, now, nums.size(), nums); return root; } };

浙公网安备 33010602011771号