• 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;
        }
    };
  • 相关阅读:
    1.2.2 标准命令概述
    1.3 第一个Go程序
    2. 基础类型
    转载:Pixhawk源码笔记一:APM代码基本结构
    IIS6的工作进程回收
    在电脑前独坐,又已经凌晨3点了
    IT人:为什么快乐不起来
    平淡的一天,平淡的心情
    发现一个很好玩的东西
    Jmeter脚本增强检查点
  • 原文地址:https://www.cnblogs.com/willwu/p/6057570.html
Copyright © 2020-2023  润新知