zoukankan      html  css  js  c++  java
  • 108. 将有序数组转换为二叉搜索树

    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);
            }
        }
    }
  • 相关阅读:
    Nodejs读取文件时相对路径的正确写法(使用fs模块)
    node 读取多个文件、合并多个文件、读写多个文件
    js中typeof用法详细介绍
    express源码分析之Router
    14 Django的用户认证组件
    13-1 jquery操作cookie
    13 Django组件- cookie与session
    12 Django组件-form组件
    11 Django组件-分页器
    10 Django与Ajax
  • 原文地址:https://www.cnblogs.com/stono/p/9557314.html
Copyright © 2011-2022 走看看