题目描述
给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。
本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
前序遍历构建二叉树
class Solution {
ListNode h
;
public TreeNode
sortedListToBST(ListNode head
) {
if(head
== null
)return null
;
if(head
.next
== null
)return new TreeNode(head
.val
);
h
=head
;
int len
= 0;
while(head
!= null
){
head
= head
.next
;
len
++;
}
return BST(0,len
-1);
}
public TreeNode
BST(int left
, int right
){
if(left
>right
) return null
;
int mid
= left
+ (right
- left
+1)/2;
TreeNode leftTree
= BST(left
, mid
- 1);
TreeNode root
= new TreeNode(h
.val
);
h
=h
.next
;
root
.left
= leftTree
;
root
.right
= BST(mid
+1,right
);
return root
;
}
}