美文网首页
排序列表转换为二分查找树

排序列表转换为二分查找树

作者: 徐不歪了 | 来源:发表于2017-07-15 16:12 被阅读0次

给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树

您在真实的面试中是否遇到过这个题? Yes
样例

样例.png

思路:

这个题目本质上就是一个找中间值的过程。原型就是题目的示例那样。不断地找中间值。root。
利用递归的思想,再将中间值拆分,再(左边的链接)这个中间值(root->left)。然后中间值->next(右边的链表)的中间值(root->right)。
每次递归直接返回root。

/**
 * Definition for ListNode.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int val) {
 *         this.val = val;
 *         this.next = null;
 *     }
 * }
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */ 
public class Solution {
    /**
     * @param head: The first node of linked list.
     * @return: a tree node
     */
    public TreeNode sortedListToBST(ListNode head) {  
        // write your code here
        //采用递归的算法,先算出最简单的三个。
        int count=0;
        ListNode l=head;
        while(l!=null)
        {
            l=l.next;
            count++;
        }//求出整个个数
        if(count==0)
            return null;
        if(count==1)
            return new TreeNode(head.val);
        int mid=count/2;//中间值
        ListNode l1=head;
        int left=0;
        while(left<mid)
        {   
            l1=l1.next;
            left++;
        }
        ListNode pre=head;
        while(pre.next!=l1)
        {
            pre=pre.next;
        }
        pre.next=null;
        
        TreeNode root=new TreeNode(l1.val);
        root.right=sortedListToBST(l1.next);
        root.left=sortedListToBST(head);
        return root;
    }
}

相关文章

  • 数据结构--查找

    查找分类 有序查找(二分查找、插值查找、斐波拉契查找) 线性索引查找 二叉排序树 散列表

  • 排序列表转换为二分查找树

    给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 您在真实的面试中是否遇到过这个题? Yes...

  • 2.4.2 查找和排序

    排序 复习1:冒泡排序 复习2:快速排序 查找 1)顺序查找2)二分查找 3)哈希表查找4)二叉排序树查找

  • 算法之二分查找

    排序算法 二分查找 用于有序元素列表的查找性能: Python实现: C#实现

  • Swift语言实现几个简单算法

    栈队列二分查找插入排序归并排序快速排序 栈 队列 二分查找 二分查找是用于快速查找到目标数据(已排序)的一种查找方...

  • 数据结构和算法-持续更新中...

    栈 二叉树 队列 堆 排序 冒泡排序 归并排序 先分割一个再按照大小有序合并 基数排序 查找 二分查找(折半查找)...

  • 总结算法图解知识点

    二分查找 O(log2*n) 有序的元素列表 选择排序 O(n^2) 快速排序 广度优先查找 迪克斯特拉算法 K邻...

  • 排序查找c++

    排序算法 选择排序 顺序查找 二分查找

  • 18-04-27  python3 算法笔记 003查找与排序

    查找: 顺序查找 二分查找 hash查找 排序: 冒泡排序 选择排序 插入排序希尔排序 归并排序 快速...

  • 剑指Offer.C++.code6-10

    (1)排序和查找是面试考察算法的重点,如二分查找、归并排序、快速排序等;(2)查找:顺序查找、二分查找、哈希表查找...

网友评论

      本文标题:排序列表转换为二分查找树

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