您的位置:首页 > 其它

把排序数组转换为高度最小的二叉搜索树

2017-04-12 20:29 246 查看
题目:

给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。


 注意事项


There may exist multiple valid solutions, return any of them.

样例

给出数组 
[1,2,3,4,5,6,7]
,
返回
4
/   \
2     6
/ \    / \
1   3  5   7


思路:

将给出的向量从中间一分为二,小的一部分位于当前根节点的左子树位置,大的一部分位于当前根节点的右子树位置。运用递归直至向量中没有可以分的元素为止。在要实现的函数里令 int begin=0;

        int end=A.size()-1;建立初始值,便于调用之前定义的函数求解问题。

代码:

class Solution {

public:

    /**

     * @param A: A sorted (increasing order) array

     * @return: A tree node

     */

TreeNode *sort(vector<int> &A,int begin,int end)  

{   if(begin>end)

    return NULL;

    int mid=(begin+end)/2;

    TreeNode *root=new TreeNode(A[mid]);

    root->left=sort(A,begin,mid-1);

    root->right=sort(A,mid+1,end);

    return root;

}

TreeNode *sortedArrayToBST(vector<int> &A) {

        // write your code here

        if(A.size()==0)

        return NULL;

        int begin=0;

        int end=A.size()-1;

        int mid=(begin+end)/2;

        TreeNode *root=new TreeNode(A[mid]);

        root->left=sort(A,begin,mid-1);

        root->right=sort(A,mid+1,end);

       return root;

        

    }

};

感想:

这个题不是我自己想出来的,一开始理解错了题意,完全按照层次遍历的思路去放节点。后来搜了一下别人的代码,理解了一下自己按照理解的打上去了,感觉这个想法很奇妙。十分值得学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: