LeetCode 109: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.          从给定的有序链表生成平衡二叉树。


分三步:
1. Get the number of nodes获取链表大小n
2. make a balanced tree. (pre-order, bfs) 构造n个节点的平衡树
3. assign values. (in-order, dfs) 赋值

每步均为O(n) time

第2步需要 O(n) sapce

class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        int len=0;
        ListNode *p=head;
        while(p){
            len++;
            p=p->next;
        }
        if(len==0) return NULL;
        TreeNode* root=makeTree(len);
        inorder(root,head);
        return root;
    }
    
    TreeNode* makeTree(int n){
        TreeNode *root=new TreeNode(0);
        queue<TreeNode*> q;
        q.push(root);
        n--;
        while(true){
            if(n==0) break;
            TreeNode *x=q.front();
            q.pop();
            x->left=new TreeNode(0);
            q.push(x->left);
            n--;
            if(n==0) break;
            x->right=new TreeNode(0);
            q.push(x->right);
            n--;
            if(n==0) break;
        }
        return root;
    }
    
    ListNode* inorder(TreeNode* root,ListNode* node){
        if (root->left != NULL) 
            node = inorder(root->left, node);
        root->val = node->val;
        node = node->next;
        if (root->right != NULL) 
            node = inorder(root->right, node);
        return node;
    }
};



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值