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

    第一次在力扣上做树的题,理论明白了,递归还是有点难理解。
    注释的代码是树的结构,题中默认的。
    首先,二叉排序树的中序遍历是有序的,题中也是有序数组,这就巧了。如果以最中间的那个数为根节点,比它小的数在左子树,比它大的数在右子树。然后其左边又应该是一棵平衡二叉树,右边也是。至于为什么,有待研究。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    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 root = new TreeNode(nums[mid]);
            root.left = helper(nums,left,mid-1);
            root.right = helper(nums,mid+1,right);
    
            return root;
        }
    }
    
    
  • 相关阅读:
    dp的冗余(选数类)
    noip2016自测报告
    dalao高精
    二叉苹果树
    最长上升子序列加强版
    Above the Median
    树状数组学习笔记
    Java委托机制
    Java集合
    Java异常
  • 原文地址:https://www.cnblogs.com/yu-jiawei/p/13231565.html
Copyright © 2011-2022 走看看