package Depth_first_Search;
public class SortedListToBST_109 {
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
public TreeNode sortedListToBST(ListNode head) {
if(head==null) {
return null;
}
ListNode mid=findMiddleNode(head);
TreeNode node=new TreeNode(mid.val);
// 遞歸結束標誌
if(head==mid) {
return node;
}
node.left=sortedListToBST(head);
node.right=sortedListToBST(mid.next);
return node;
}
ListNode findMiddleNode(ListNode head){
ListNode prePtr=null;
ListNode slowPtr=head;
ListNode fastPtr=head;
while(fastPtr!=null&&fastPtr.next!=null) {
prePtr=slowPtr;
slowPtr=slowPtr.next;
fastPtr=fastPtr.next.next;
}
// 找到鏈表中的中間元素後,將鏈表從中間元素的左側斷開
if(prePtr!=null) {
prePtr.next=null;
}
return slowPtr;
}
}
109. Convert Sorted List to Binary Search Tree(快慢指針、遞歸、BST)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.