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/ 谢谢!

  • 相关阅读:
    杭电2027
    杭电2028
    开发者所需要知道的iOS7 SDK新特性
    苹果已向这15款产品和应用宣战
    谷歌J2ObjC(Java to ObjectiveC)版本更新
    国外应用评测网站汇总
    iOS 7 UI设计官方图集
    iOS 7UI设计模板
    js中 setTimeout延时0毫秒的作用
    C# Xmlrpc
  • 原文地址:https://www.cnblogs.com/double-win/p/3874950.html
Copyright © 2011-2022 走看看