美文网首页
单链表转换为平衡查找树(Leetcode109)

单链表转换为平衡查找树(Leetcode109)

作者: zhouwaiqiang | 来源:发表于2018-11-11 20:19 被阅读0次

题目要求

  • 给定一个升序的单链表,将其转换为一颗平衡查找树
  • 举例:给定链表[-10,-3,0,5,9],转换为[0,-3,9,-10,null,5]或者其他平衡查找树

解题思路

  • 平衡查找树是需要左子树比根节点小,右子树比根节点大形成的一棵树
  • 可以利用这个特性进行递归构造,首先是我们找到一个链表中的中间节点,然后这个中间节点作为根节点,中间节点左侧为左子树,右侧为右子树进行递归构建,当这个分段为null或者起始节点和终止节点相等此时就作为递归返回条件
  • 查找链表中间节点:可以采用一步和两步索引法,一个变量mid遍历链表每次走一个节点,另一个变量temp一次走两个节点,当temp走到链表尾时,mid刚好走到链表中间。
  • 然后按照这个mid构造平衡查找树

源代码实现(非本人实现,学习的他人解法)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode sortedListToBST(ListNode head) {
        return helper(head, null);
    }
    
    private TreeNode helper(ListNode head, ListNode last) {
        if (head == null || head == last) return null;
        ListNode mid = head, temp = head;
        //寻找中间节点
        while (temp != last && temp.next != last) {
            mid = mid.next;
            temp = temp.next.next;
        }
        TreeNode root = new TreeNode(mid.val);
        root.left = helper(head, mid);
        root.right = helper(mid.next, last);
        return root;
    }
}

相关文章

  • 单链表转换为平衡查找树(Leetcode109)

    题目要求 给定一个升序的单链表,将其转换为一颗平衡查找树 举例:给定链表[-10,-3,0,5,9],转换为[0,...

  • InnoDB 索引

    链表 -> 二叉查找树 -> 平衡二叉树 -> B树 -> B+树 链表:层级等于链表长度二叉查找树:链表优化,...

  • Leetcode每日一题(4)

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

  • LeetCode-109-有序链表转换二叉搜索树

    有序链表转换二叉搜索树 题目描述:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。本题中,一...

  • 109. Convert Sorted List to Bina

    将链表转化为平衡二叉查找树,和数组转化为平衡二叉查找树类似,思路比较清晰。 关键点在于如何寻找链表的中点,运用了快...

  • 哈希表 当拉链长度超过阀值时,会有什么优化

    HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8),时,将链表转换为红黑树,这样大大减少了查找时间...

  • Leetcode109.有序链表转换二叉搜索树

    题目描述 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一...

  • 极客时间数据结构与算法之美笔记25~26

    二叉树到二叉查找树,是为了查找数据的效率接近logN。 二叉查找树到平衡二叉查找树,是为了防止二叉查找树沦为链表。...

  • 2019-08-10

    红黑树是一种介于链表和平衡二叉树之间的折中方案,查找和插入都是相对于链表和平衡二叉树来说更平衡的,不会产生太极端的...

  • 数据结构和算法树的进阶(八)

    平衡树 常见平衡树:平衡二叉查找树,2-3查找树,AVL树, 红黑树 2-3查找树 概述:保证查找树的平衡性,我们...

网友评论

      本文标题:单链表转换为平衡查找树(Leetcode109)

      本文链接:https://www.haomeiwen.com/subject/vjdffqtx.html