1. 程式人生 > >108. 將有序數組轉換為二叉搜索樹

108. 將有序數組轉換為二叉搜索樹

convert star 沒有 esc com class return rgs leetcode

108. 將有序數組轉換為二叉搜索樹

https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/description/

package com.test;


public class Lesson108 {
    public static void main(String[] args) {
        int[] nums = {-10,-3,0,5,9};
//        int[] nums = {0,1,2,3,4,5,6,7,8};
//        int[] nums = {0,1,2,3,4,5,6};
TreeNode treeNode = sortedArrayToBST(nums); printNode(treeNode); // TreeNode t1 = new TreeNode(1); // TreeNode t2 = new TreeNode(2); // TreeNode t3 = new TreeNode(3); // t1.left = t2; // t1.right = t3; // printNode(t1); } public static TreeNode sortedArrayToBST(int
[] nums) { int length = nums.length; TreeNode res = bst(0, length, nums); return res; } private static TreeNode bst(int start, int end, int[] nums) { // 如果有三個點 if (end - start - 3 == 0) { TreeNode res = new TreeNode(nums[start+1]); TreeNode left
= new TreeNode(nums[start]); TreeNode right = new TreeNode(nums[start+2]); res.left = left; res.right = right; return res; } // 如果有兩個點 if (end - start - 2 == 0) { TreeNode res = new TreeNode(nums[start+1]); TreeNode left = new TreeNode(nums[start]); res.left = left; return res; } // 如果有一個點 if (end - start - 1 == 0) { TreeNode res = new TreeNode(nums[start]); return res; } // 沒有點 if (start - end == 0) { return null; } // 如果有很多點,取中間的點作為樹根,左側的點作為左樹,右側的點作為右樹 int middle = start+ (end-start)/2; int num = nums[middle]; TreeNode res = new TreeNode(num); TreeNode left = bst(start,middle,nums); TreeNode right = bst(middle+1,end,nums); res.left = left; res.right = right; return res; } private static void printNode(TreeNode treeNode) { if (treeNode == null) { return; } // 先根 System.out.print(treeNode.val+" "); if (treeNode.left != null) { printNode(treeNode.left); } // 中根 // System.out.print(treeNode.val+" "); if (treeNode.right != null) { printNode(treeNode.right); } } }

108. 將有序數組轉換為二叉搜索樹