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);
            }
        }
    }
  • 相关阅读:
    SurfaceView 和 View 区别
    投资学第一章 investments-introduction
    HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
    多个Activity之间的切换与数据交互
    HDU 4715 Difference Between Primes (打表)
    org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) was found in the CDATA sectio
    用纯jsp实现用户的登录、注册与退出
    Java单态模式
    植物-蔬菜:刺儿菜
    汉语-词语:生活
  • 原文地址:https://www.cnblogs.com/stono/p/9557314.html
Copyright © 2011-2022 走看看