Convert Sorted List to Binary Search Tree

来源:互联网 发布:line聊天软件 编辑:程序博客网 时间:2024/06/01 23:48

一、问题描述

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

二、思路

数组的关键在于下标,链表的关键在于首位节点。我们递归的退出条件是头尾节点相等:

        if(head == tail)            return NULL;
即链表为空,另一个退出条件是链表只有一个节点:

        if(head -> next == tail){            TreeNode *root = new TreeNode(head->val);    return root;        }

最关键的部分在于找到中间节点,和数组转变为二叉树思路类似。Convert Sorted Array to Binary Search Tree

为了找到中间节点,我们用了快慢指针,mid和temp。

三、代码

/** * 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* sortedListToBST(ListNode* head) {        return createTree(head,NULL);    }    TreeNode* createTree(ListNode* head, ListNode* tail){        if(head == tail)            return NULL;        if(head -> next == tail){            TreeNode *root = new TreeNode(head->val);    return root;        }        ListNode *mid = head, *temp = head;        while(temp != tail && temp->next != tail){    mid = mid->next;    temp = temp->next->next;    }    TreeNode *root = new TreeNode(mid->val);    root->left = createTree(head, mid);    root->right = createTree(mid->next, tail);    return root;    }};


0 0
原创粉丝点击