LeetCode109. Convert Sorted List to Binary Search Tree

来源:互联网 发布:长城证券软件 编辑:程序博客网 时间:2024/05/21 19:42

题目:

https://leetcode.com/problems/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.

思路:

题意:给一个排好序的链表,把它转化成高度平衡的二叉查找树。
其实就是不断的选出中间的节点作为根结点,分成两段,再分别往下递归选出中间节点。

代码:

/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NULL) {} * }; *//** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* partition(ListNode* head,int len){        if(head==NULL || len<=0){            return NULL;        }        ListNode* left=head;        ListNode* right=head;        int partLen=len/2;        for(int i=1;i<=partLen;i++){            right=right->next;        }        TreeNode* treeNode=new TreeNode(right->val);        right=right->next;        TreeNode* leftChild=partition(left,partLen);        TreeNode* rightChild=partition(right,len-partLen-1);        treeNode->left=leftChild;        treeNode->right=rightChild;        return treeNode;    }    TreeNode* sortedListToBST(ListNode* head) {        int len=0;        if(head==NULL){            return NULL;        }        ListNode* p=head;        while(p!=NULL){            len++;            p=p->next;        }        return partition(head,len);    }};
1 0
原创粉丝点击