zoukankan      html  css  js  c++  java
  • 【力扣】109. 有序链表转换二叉搜索树

    给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。

    本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

    示例:

    给定的有序链表: [-10, -3, 0, 5, 9],

    一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:

    0
    /
    -3 9
    / /
    -10 5

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree

     时间复杂度:O(n * log n),其中 n 是链表的长度。空间复杂度:O(n * log n)

    public TreeNode sortedListToBST(ListNode head) {
            //这个题最重要的就是找到中间点
            if(head == null) return null;
            else if(head.next == null) return new TreeNode(head.val);
            ListNode pre = head; //设置该节点,目的是什么呢?目的是做链表的分离
            ListNode slow = head.next; // 设置两个节点,一个快的节点,一个慢的节点,快的节点一次走两个格,慢的节点一次走一个格,则当快的节点到头时,慢节点的位置就是中间
            ListNode fast = head.next.next;
            while( fast!= null && fast.next != null){
                pre = pre.next; //这里是为了找到中间左边的节点
                fast = fast.next.next;
                slow = slow.next;//这里是为了到最后
            }
            //找到中间点slow
            pre.next=null; //将链表的中间节点同下一个分离
            TreeNode root = new TreeNode(slow.val);
            root.left = sortedListToBST(head);
            root.right = sortedListToBST(slow.next); 
            return root;
        }
    一个入行不久的Java开发,越学习越感觉知识太多,自身了解太少,只能不断追寻
  • 相关阅读:
    python025 Python3 正则表达式
    python024 Python3 实例
    python023 Python3 标准库概览
    python022 Python3 面向对象
    python021 Python3 错误和异常
    列表和元组的元素不可被修改,但列表和元组的元素的元素可以被修改
    织梦标签
    自动添加QQ
    php把时间存入数据库为年月日时分秒类型
    PHP后台批量删除数据
  • 原文地址:https://www.cnblogs.com/fengtingxin/p/13524011.html
Copyright © 2011-2022 走看看