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

 

posted @ 2016-08-27 12:53  Gu Feiyang  阅读(114)  评论(0)    收藏  举报