Leetcode108. 二叉搜索树DFS+中序遍历+递归

将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。
给定有序数组: [-10,-3,0,5,9],

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

/**
 * 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) {
       return push_it(nums,0,nums.size());
    }
private:
    TreeNode* push_it(vector<int> &res, int start, int end){
        if(start>=end) return NULL;
        int mid = (start+end)/2;
        TreeNode *p = new TreeNode(res[mid]);
        p->left = push_it(res,start,mid);
        p->right = push_it(res,mid+1,end);
        return p;
    }
};

思想:找中间的树创建节点然后分别迭代左右 保证每个树的左子树右子树深度尽量一致。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容