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

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

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.

分析:将一个按升序排列的单链表转换成一个平衡二叉查找树,难点在于如何确定单链表的中间节点,因为单链表不像数组那样可以直接得到n/2的数值。可以用两个指针的方法来解决这个问题。我们定义两个指针one_step,two_step,two_step每次移动两步,one_step每次移动一步,这样当two_step移动到链表尾的时候,one_step正好到达链表中间的位置。只要确定了单链表的中间节点,我们再递归的将该节点左侧和右侧的链表转换成BST。时间复杂度是O(n),空间复杂度O(1)。

代码如下:

1 class Solution { 2 public: 3     TreeNode *sortedListToBST(ListNode *head) { 4         if(!head) return NULL; 5         ListNode * two_step = head; 6         ListNode * one_step = head, * pre_onestep = NULL; 7         while(two_step->next && two_step->next->next){ 8             two_step = two_step->next->next; 9             pre_onestep = one_step;10             one_step = one_step->next;11         }12         TreeNode * root = new TreeNode(one_step->val);13         if(pre_onestep){14             pre_onestep->next = NULL;15             root->left = sortedListToBST(head);16         }17         if(one_step->next)18             root->right = sortedListToBST(one_step->next);19         return root;20     }21 };

 

转载于:https://www.cnblogs.com/Kai-Xing/p/3912651.html

你可能感兴趣的文章
Javascript闭包(Closure)详解
查看>>
【HTML XHTML CSS基础教程(第6版)】笔记之CSS笔记(7~25章)
查看>>
IO流OutputStream
查看>>
tomcat8.5 manager 配置
查看>>
前端实现某一列不能重复不能且不能为空
查看>>
测试流程的注意事项
查看>>
tyvj 1860 后缀数组
查看>>
最小二乘法曲线拟合
查看>>
ElasticSearch(二十六)修改分词器及定制自己的分词器
查看>>
(原创)用c++11打造好用的any
查看>>
洛谷 P2947 [USACO09MAR]向右看齐Look Up【单调栈】
查看>>
POJ 3070 Fibonacci【斐波那契数列/矩阵快速幂】
查看>>
uva 11724 Evaluate the Expression
查看>>
QQ微博登陆封装
查看>>
例4-11
查看>>
poj3565Ants——KM算法
查看>>
bzoj1588 [HNOI2002]营业额统计——双向链表
查看>>
CRM WEB UI 04明细界面添加按钮
查看>>
IOS8后UIImagePickConroller警告提示解决方法
查看>>
自动化mobile测试
查看>>