欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

[LeetCode] 每日一题:109 有序链表转换二叉搜索树

程序员文章站 2022-07-12 23:07:46
...

题目

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

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

示例:

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

解决

思路
先转成数组,再每次递归去取中间的那个数

代码

class Solution {
    public TreeNode sortedListToBST(ListNode head) {
        int len=0;
        ListNode p=head;
        while(p!=null){
            len++;
            p=p.next;
        }
        int[] array =new int[len];
        p=head;
        for(int i=0;i<len;i++){
            array[i]=p.val;
            p=p.next;
        }
        return conTree(array,0,len-1);
        
        
    }
    public TreeNode conTree(int[] array,int low,int high){
        if(high>=low){
            int mid=(low+high)/2;
            TreeNode p=new TreeNode(array[mid]);
            p.left=conTree(array,low,mid-1);
            p.right=conTree(array,mid+1,high);
            return p;
        }
        return null;
    }
}
相关标签: leetcode leetcode