zoukankan      html  css  js  c++  java
  • [LeetCode] Convert Sorted List to Binary Search Tree

    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.

    解题思路:

    题意为构造有序链表的二分查找树。找到中间节点的办法用双指针法。注意我们还须要保存中间节点的前一个节点,便于一个链表分成两个链表。注意滴38行,是将链表恢复成原来的模样。

    /**
     * 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) {
            if(head == NULL){
                return NULL;
            }
            ListNode* myHead = new ListNode(0);
            myHead->next = head;
            ListNode* pre = myHead;
            ListNode* one = head, *two = head;
            while(two->next!=NULL && two->next->next!=NULL){
                pre = pre->next;
                one = one->next;
                two = two->next->next;
            }
            two = one->next;
            pre->next = NULL;
            TreeNode* root = new TreeNode(one->val);
            root->left = sortedListToBST(myHead->next);
            root->right = sortedListToBST(two);
            pre->next = one;    //恢复链表结构
            //delete one; //这里为啥不能删除?
            delete myHead;
            return root;
        }
    };


  • 相关阅读:
    正则表达式---用户验证
    最短路 Dijkstra
    最短路 Dijkstra+堆优化
    LCIS(最长公共上升子序列)
    最小生成树 Kruskal
    网络流 最大流
    网络流 最小费用最大流
    树链剖分
    树状数组
    双重Hash
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/6784665.html
Copyright © 2011-2022 走看看