LeetCode:Convert Sorted List to Binary Search Tree

来源:互联网 发布:ntp服务器地址 端口 编辑:程序博客网 时间:2024/06/10 18:24

中序遍历思想,找到中位数构建根节点,然后左右链表递归构建左子树和右子树

class Solution {public:    TreeNode *sortedListToBST(ListNode *head) {        //递归方法实现,通过中位数构建树的根节点,左右子链表构建左子树和右子树        TreeNode *root=NULL;        if(!head)            return root;        if(!head->next)        {            root=(TreeNode *)malloc(sizeof(TreeNode));            root->val=head->val;            root->left=NULL;            root->right=NULL;            return root;        }        ListNode *p,*q,*pre;//pre指向中位数结点的前一个结点        p=head;        q=head;        pre=head;        while(q&&q->next)        {            if(p!=head)               pre=pre->next;            p=p->next;            q=q->next->next;        }        ListNode *mid;//mid为中位数结点        mid=p;        pre->next=NULL;        q=mid->next;        root=(TreeNode *)malloc(sizeof(TreeNode));        root->val=mid->val;        root->left=sortedListToBST(head);        root->right=sortedListToBST(q);        return root;    }};


0 0