有序数组转为平衡搜索二叉树

说明:
将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定有序数组: [-10,-3,0,5,9],

一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树:

  0
 / \

-3 9
/ /
-10 5

思路:树、链表等数据结构的算法一般情况下需要使用递归的方法,而递归的构造需要注意构造递归停止条件,递归返回值,递归输入。这三点想明白后一般就OK了。
今天上午的心情有点不稳定,因为在做题的时候,过来一个人,轻松地说,leetcode上面的这些题目一般写过代码的人都可以轻松做出来,而我正好写这个遇到指针返回的bug,听了这番言论后,心理五味杂陈,这是一种什么感觉呢?就是欧美火箭都上天了,你还在这里钻木取火的感觉,气得我效率直线下降。
真正验证了一句话:十行代码写了一上午。可见思路清晰、严谨的重要性。人越长大,注意力越难以集中,注意力不集中,效率真是低下。

/**
 * 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:
    TreeNode* sortedArrayToBST(vector<int>& nums) {
        TreeNode* root = NULL;
        if(nums.size()<1) {
            return root;
        }
        int medium = nums.size()/2;
        root = new TreeNode(nums[medium]);
        vector<int> vec_left(nums.begin(), nums.begin()+medium);
        vector<int> vec_right(nums.begin()+medium+1, nums.end());
        root->left = sortedArrayToBST(vec_left);
        root->right = sortedArrayToBST(vec_right);
        return root;
    }                     
};

猜你喜欢

转载自blog.csdn.net/mixiaoxinmiss/article/details/81384495