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.

    题意:给定一个有序的链表,将其转换成平衡二叉搜索树

    思路: 二分法

    要构建一个平衡二叉树,二分法无疑是合适的,至于如何分是的代码简洁,就需要用到递归了。

    class Solution {
    public:
        // find middle element of the list
        ListNode *getmiddleList(ListNode *left,ListNode *right){
            //omit the condition :  left!=right && left->next!=right
            ListNode *pre,*last;
            pre=left; last =left->next;
            while(last!=right){
                last = last->next;
                if(last!=right){
                    last = last->next;
                    pre=pre->next;
                }
            }
            return pre;
        }
        
        // retri-BST constructor
        TreeNode *getBST(ListNode *left,ListNode *right){
            TreeNode *root = new TreeNode(0);
            //no leaf 
            if(left==right) return NULL;
            // only one leaf
            if(left->next == right){
                root->val=left->val;
                return root;
            }
            //more than one leaf
            ListNode *middle =getmiddleList(left,right);
            root->val = middle->val;
            root->left = getBST(left, middle);
            root->right = getBST(middle->next,right);
            return root;
        }
        TreeNode *sortedListToBST(ListNode *head) {
            TreeNode* root= new TreeNode(0);
            if(head==NULL) return NULL;
            if(head->next==NULL){
                root->val=head->val;
                root->left=root->right=NULL;
                return root;
            }
            ListNode *left,*middle,*right;
            middle=left=head;
            right=head->next;
            while(right){
                right=right->next;
                if(right){
                    right=right->next;
                    middle=middle->next;
                }
            }
            root->val=middle->val;
            root->left = getBST(left, middle);
            root->right= getBST(middle->next,right);
            return root;
        }
    };     

    转载请注明出处: http://www.cnblogs.com/double-win/ 谢谢!

  • 相关阅读:
    Vue.js
    docker搭建pxc
    mkvirtualenv管理python版本
    gitlab
    centos7安装kvm及kvm管理
    centos7安装docker
    【从NIO到Netty】8.零拷贝案例2-网络传输
    【从NIO到Netty】7.零拷贝案例1-复制文件
    【从NIO到Netty】6.零拷贝介绍
    【从NIO到Netty】5.NIO EchoServer
  • 原文地址:https://www.cnblogs.com/double-win/p/3874950.html
Copyright © 2011-2022 走看看