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

  • 相关阅读:
    HDFS API
    Wrong FS: hdfs://xxx/xxx expected: file:///
    Sqoop拒绝连接错误
    MySQL设置远程连接
    Eclipse远程连接Hadoop
    Hadoop创建新用户
    Nutch的安装和配置
    NameNode重新格式化以后DataNode不能启动
    Pig拒绝连接错误
    Pig jline.Terminal错误
  • 原文地址:https://www.cnblogs.com/double-win/p/3874950.html
Copyright © 2020-2023  润新知