zoukankan      html  css  js  c++  java
  • [LeetCode] 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.

    方法:为了使BST高度平衡,要找链表中的中值作为当前根节点。

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    /**
     * Definition for binary tree
     * 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 *pmid = FindMid(head);
            TreeNode *root = new TreeNode(pmid->val);
            if(pmid != head)
               root->left = sortedListToBST(head);
            root->right = sortedListToBST(pmid->next);
            return root;
        }
    private:
        ListNode *FindMid(ListNode *head){//找中间结点
            if(head->next==NULL)
                return head;
            ListNode *Pmid=head,*p=head,*Pmin_pre = head;
            while(p!=NULL && p->next != NULL)
            {
               p = p->next;
               p = p->next;
               Pmin_pre = Pmid;
               Pmid = Pmid->next;
            }//end while;
            Pmin_pre->next = NULL;
            return Pmid; 
        }
    };
  • 相关阅读:
    面向对象基础之类与对象
    常用模块(一)
    re模块与正则表达式
    初识模块
    函数进阶篇
    Spring + Mybatis 读写分离
    java包的所有类生成class
    Oralce数据库的优化
    Java 搜索引擎
    JAVA分布式架构的演进
  • 原文地址:https://www.cnblogs.com/Xylophone/p/3890549.html
Copyright © 2011-2022 走看看