目录

【leetcode hot 100 108】将有序数组转换为二叉搜索树

解法一:中序遍历(递归),总是选择中间位置左边的数字作为根节点。

二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排序的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。

给定二叉搜索树的中序遍历,是否可以唯一地确定二叉搜索树?答案是否定的。如果没有要求二叉搜索树的高度平衡,则任何一个数字都可以作为二叉搜索树的根节点,因此可能的二叉搜索树有多个。因此我们要固定循环方式。

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode sortedArrayToBST(int[] nums) {
        return helper(nums, 0, nums.length-1);
    }

    public TreeNode helper(int[] nums, int left, int right){
        if(left>right){
            return null;
        }
        // 取中间或中间左边的元素为根节点
        int mid = (left+right)/2;
        TreeNode node = new TreeNode(nums[mid]);
        node.left = helper(nums, left, mid-1);
        node.right = helper(nums, mid+1, right);
        return node;
    }
}
本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
Mryan200543 分钟前
NumPy系列 - 创建矩阵
数据结构·python·线性代数·矩阵·numpy
小馒头学python3 小时前
蓝耘智算|从静态到动态:探索Maas平台海螺AI图片生成视频功能的强大能力
人工智能·python·学习·算法·aigc
Q_Boom5 小时前
LeetCode 环形链表II:为什么双指针第二次会在环的入口相遇?
算法·leetcode·链表
SsummerC5 小时前
【leetcode100】括号生成
python·算法·leetcode
gotoc丶5 小时前
堆排序:力扣215.数组中的第K个大元素
javascript·数据结构·算法·leetcode·排序算法
一只_程序媛5 小时前
【leetcode hot 100 199】二叉树的右视图
算法·leetcode·职场和发展
一只_程序媛5 小时前
【leetcode hot 100 230】二叉搜索树中第K小的元素
算法·leetcode·职场和发展
双叶8368 小时前
(C语言)写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和(递归函数)
c语言·开发语言·数据结构·算法·游戏
BineHello8 小时前
强化学习 - PPO控制无人机
人工智能·算法·自动驾驶·动态规划·无人机·强化学习
阿饼2408 小时前
算法——层序遍历和中序遍历构造二叉树
数据结构·算法