博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Convert Sorted List to Binary Search Tree
阅读量:6894 次
发布时间:2019-06-27

本文共 1678 字,大约阅读时间需要 5 分钟。

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.
想了好久想不出来。后来看了题目分类里面说是DFS,可是没有想出DFS的算法来。后来想到了一个递归的方法。可是空间和时间都是O(n)。
后来网上找了一个空间是O(1)的时间是O(n)的算法,是一种新的解题思路,用的是中递归。

一般我解题都是用的头递归或者尾递归。第一次

见识到了中递归,相当于把递归当成了一个循环体,用引用来作为变量,每一个递归中改动,须要非常强大的想象力。把整个递归树在脑子里想清楚。

空间和时间都为O(n):

TreeNode *sortedListToBST(ListNode *head) 	{		vector
treeNodes; while (head != NULL) { TreeNode *node = new TreeNode(head->val); treeNodes.push_back(node); head = head->next; } return genBST(0, treeNodes.size()-1, treeNodes); } TreeNode* genBST(int start, int end, vector
&treeNodes) { if (start == end) return treeNodes[start]; else if (start+1 == end) { treeNodes[start]->right = treeNodes[end]; return treeNodes[start]; } int mid = (start+end)/2; TreeNode* root = treeNodes[mid]; root->left = genBST(start, mid-1, treeNodes); root->right = genBST(mid+1, end, treeNodes); return root; }
空间为O(1)时间为O(n):

TreeNode *sortedListToBST(ListNode *head)	{	    int len = 0;        ListNode * node = head;        while (node != NULL)        {            node = node->next;            len++;        }        return buildTree(head, 0, len-1);    }        TreeNode *buildTree(ListNode *&node, int start, int end)    {        if (start > end) return NULL;        int mid = start + (end - start)/2;        TreeNode *left = buildTree(node, start, mid-1);        TreeNode *root = new TreeNode(node->val);        root->left = left;        node = node->next;        root->right = buildTree(node, mid+1, end);        return root;    }
解法引用:http://www.bwscitech.com/a/jishuzixun/javayuyan/2013/0930/15822.html

转载地址:http://ppzdl.baihongyu.com/

你可能感兴趣的文章
第一个libgdx程序--仿别踩白块
查看>>
一个开源项目维护者的笔记 — 为什么我关闭 PRs
查看>>
技术人员要失业?未来80% IT 工作将自动化
查看>>
ng-book 2 —— AngularJS 2 教程
查看>>
SSH远程登录原理与运用
查看>>
Apache Spark机器学习.1.4 MLlib
查看>>
腾讯Android自动化测试实战3.1.1 什么是Robotium
查看>>
《Wireshark网络分析的艺术》—被误解的TCP
查看>>
《Linux防火墙(第4版)》——1.4 地址解析协议(ARP)
查看>>
《乐在C语言》一1.5 关键词
查看>>
Oracle内核技术揭密
查看>>
《软件工程(第4版?修订版)》—第1章1.3节什么是好的软件
查看>>
《PHP、MySQL和Apache入门经典(第5版)》一一2.7 基本安全规则
查看>>
《无线网络:理解和应对互联网环境下网络互连所带来的挑战》——2.5 3GPP2...
查看>>
《深入理解JavaScript》——2.6 JavaScript是广泛使用的吗
查看>>
Velocity官方指南-应用程序的属性
查看>>
《流量的秘密: Google Analytics网站分析与优化技巧(第3版)》一1.7 网站分析在企业中的位置...
查看>>
Xmemcached 1.2.2发布——支持遍历所有key
查看>>
API网关,让Serverless服务开放更加迅速
查看>>
如何使用OSS事件通知功能?
查看>>