LeetCode 108. Convert Sorted Array to Binary Search Tree

108. Convert Sorted Array to Binary Search Tree

一、问题描述

Given an array where elements are sorted in ascending order, convert it to a height balanced BST.

二、输入输出

三、解题思路

Binary Search Tree 二叉搜索树

  • 定义为:是指一颗空树,或者具有如下性质的树:
    1. 若任意节点的左子树不为空,则左子树上所有节点的值均小于它的根节点值
    2. 若任意节点的右子树不为空,则右子树上所有节点的值均大于它的根节点值
    3. 任意节点的左右子树也分别为二叉搜索树 Binary Search Tree
    4. 没有键值相等的节点

Balanced Binary Tree

  • 平衡二叉树指得是左右子树的高度差值的绝对值小于等于1

递归解法

  • 要求将一个递增的数组转换成一个平衡二叉搜索树。首先找到根节点 len/2 然后左子树的节点是数组中改点的左半部分。右子树的节点是该数组中该节点右边的部分。可以使用递归的调用来完成左子树和右子树的创建
  • 递归结束条件:当nums为空时,返回空;当nums中只有一个元素时,直接返回改节点即可
  • 其实搞清了概念,这道题很简单。在树的题里面,递归使用的非常多,要注意。
/**
 * 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) {
        if(nums.size() == 0)return nullptr;
        if(nums.size() == 1)return new TreeNode(nums[0]);
        size_t len = nums.size();
        size_t mid = len / 2;
        TreeNode * ret = new TreeNode(nums[mid]);
        vector<int> left, right;
        left.insert(left.begin(), nums.begin(), nums.begin()+mid);
        right.insert(right.begin(), nums.begin()+mid+1, nums.end());
        ret->left = sortedArrayToBST(left);
        ret->right = sortedArrayToBST(right);
        return ret;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值