• 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:
        ListNode* findMiddle(ListNode* start){
            ListNode *low = start, *fast = start;
            ListNode* prelow=nullptr;
            while(fast!=nullptr){
                fast = fast->next;
                if(fast){
                    fast = fast->next;
                    prelow = low;
                    low = low->next;
                }
                
            }
            if(prelow)
                prelow->next =nullptr;//break the list
            return low;
        }
        
        TreeNode* sortedListToBST(ListNode* head) {
            if(head==nullptr)
                return nullptr;
            if(head->next ==nullptr)
                return new TreeNode(head->val);
            ListNode* mid =  findMiddle(head);
            TreeNode* root = new TreeNode(mid->val);
            root->left = sortedListToBST(head);
            root->right = sortedListToBST(mid->next);
            return root;
        }
    };
  • 相关阅读:
    关于位运算(转)
    计蒜客第三场
    数组与指针
    计蒜客第二场
    指针概念
    爬楼梯(动态规划)
    线性表基本操作的实现(合并)
    4123=喵帕斯之天才少女
    3889=神奇的函数
    1586=计算组合数
  • 原文地址:https://www.cnblogs.com/willwu/p/6057570.html
Copyright © 2020-2023  润新知