码迷,mamicode.com
首页 > 其他好文 > 详细

单链表转 BST 树

时间:2021-01-27 12:51:44      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:题目   lan   lis   复杂   说明   EDA   node   平衡二叉搜索树   typedef   

题目描述
给定一个单链表,其中的元素按升序排序,请将它转化成平衡二叉搜索树(BST)
示例1
输入
复制
{-1,0,1,2}
返回值
复制
{1,0,2,-1}
说明:本题目包含复杂数据结构TreeNode、ListNode,点此查看相关信息


typedef TreeNode Node;
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param head ListNode类 
     * @return TreeNode类
     */
    TreeNode* sortedListToBST(ListNode* head) {
        // write code here
        return build(head,NULL);
    }
    Node* build(ListNode* head,ListNode* tail) {
        if(head==NULL|| head==tail) return NULL;
        ListNode* first= head,*last=head;
        while(first!=tail && first->next!=tail) first = first->next->next,last = last->next;
        Node *root = new Node(last->val);
        
        root->left = build(head,last);
        root ->right = build(last->next,tail);
        return root;
    }
};











题目描述
给出一个升序排序的数组,将其转化为平衡二叉搜索树(BST).
示例1
输入
复制
[-1,0,1,2]
返回值
复制
{1,0,2,-1}
说明:本题目包含复杂数据结构TreeNode,点此查看相关信息



typedef TreeNode Node;
class Solution {
public:
    /**
     * 
     * @param num int整型vector 
     * @return TreeNode类
     */
    TreeNode* sortedArrayToBST(vector<int>& num) {
        if(num.size()<=0) return NULL;
        return build(num,0 ,num.size()-1);
    }
    
    Node* build(vector<int>& a,int l,int r) {
        if(l>r) return nullptr;
//         if(l==r) return new Node(a[l]);
        int mid = l+r+1>>1;
        Node * root = new Node(a[mid]);
        root ->left = build(a,l,mid-1);
        root ->right = build(a,mid+1,r);
        return root;
        
    }
};


单链表转 BST 树

标签:题目   lan   lis   复杂   说明   EDA   node   平衡二叉搜索树   typedef   

原文地址:https://www.cnblogs.com/lyr-2000/p/14326298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!