Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
思想: 利用递归的思想
注意事项:递归是一个输入是一个链表的头指针,同时要链表的尾部节点为null(要保证),否则排序时会导致错乱
java代码:
- public TreeNode sortedListToBST(ListNode head) {
- TreeNode root=null;
- if(head == null) return root;
- if(head != null && head.next==null) return new TreeNode(head.val);
- if(head!=null && head.next!=null && head.next.next==null) {
- TreeNode left = new TreeNode(head.val);
- root=new TreeNode(head.next.val);
- root.left=left;
- return root;
- }
- ListNode slow = head;
- ListNode fast = head;
- ListNode pre = slow;
- while(fast!=null && fast.next!=null) {
- fast = fast.next.next;
- pre=slow;
- slow = slow.next;
- }
- fast = slow.next;
- slow.next=null;
- root = new TreeNode(slow.val); //slow指向中间节点
- pre.next=null; //第一个链表的节点尾部为null
- TreeNode left = sortedListToBST(head);
- TreeNode right = sortedListToBST(fast);
- root.left=left;
- root.right=right;
- return root;
- }
思想二:
递归:利用每次增加中间节点的方式,并结合节点个数进行递归。
- TreeNode* addNode(ListNode * &list,int start,int end) {
- if(start>end) return NULL;
- int mid=start+(end-start)/2;
- TreeNode * left = addNode(list,start,mid-1);
- TreeNode *parent=new TreeNode(list->val);
- parent->left=left;
- list=list->next; // list指向下一个节点
- parent->right=addNode(list,mid+1,end);
- return parent;
- }
- TreeNode *sortedListToBST(ListNode *head) {
- if(head==NULL) return NULL;
- ListNode *p=head;
- int cnt=0;
- while(p!=NULL) {
- cnt++;
- p=p->next;
- }
- return addNode(head,0,cnt-1);
- }

浙公网安备 33010602011771号