当前位置 博文首页 > Yawn:Leetcode——将有序数组转换为二叉搜索树

    Yawn:Leetcode——将有序数组转换为二叉搜索树

    作者:[db:作者] 时间:2021-08-02 15:46

    1. 题目

    给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。

    高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。

    在这里插入图片描述

    2. 题解

    解法一:

    递归:

    • 可以使用递归的方式,每次取数组中间的值比如m作为当前节点
    • m前面的值作为他左子树的结点值
    • m后面的值作为他右子树的节点值
    /**
     * 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[] num) {
            if (num.length == 0)
                return null;
            return sortedArrayToBST(num, 0, num.length - 1);
        }
    
        public TreeNode sortedArrayToBST(int[] num, int start, int end) {
            if (start > end)
                return null;
            int mid = (start + end) / 2;
            TreeNode root = new TreeNode(num[mid]);
            root.left = sortedArrayToBST(num, start, mid - 1);
            root.right = sortedArrayToBST(num, mid + 1, end);
            return root;
        }
    }
    
    cs