[LeetCode 109] - 将已排序链表转换为二叉搜索树 (Convert Sorted List to Binary Search Tree)
问题
给出一个元素以递增序列排序的单链表,将其转换为一棵高度平衡的二叉搜索树。
初始思路
二叉搜索树高度平衡,意味着左右子树的高度要平衡。根据二叉树左子树节点小于根节点,右子树节点大于根节点的性质:我们在待选节点中选择值为中位数的节点作为根节点,所有小于中位数的节点作为左子树,所有大于中位数的节点作为右子树,即可满足高度平衡的要求。由于题目给出的已经是排好序的单链表,我们只要每次选择中间的节点即可。然后通过递归处理左右子树,最终完成高度平衡二叉搜索树的构建。
最终完成代码如下:
class Solution {
enum ChildType
{
LEFT,
RIGHT
};
public:
TreeNode *sortedListToBST(ListNode *head)
{
if(!head)
{
return nullptr;
}
ListNode* middle = FindMiddlePoint(head, nullptr);
TreeNode* root = new TreeNode(middle->val);
MakeSubTree(head, middle, root, LEFT);
MakeSubTree(middle->next, nullptr, root, RIGHT);
return root;
}
void MakeSubTree(ListNode* head, ListNode* end, TreeNode* parent, ChildType childType)
{
if(head == end)
{
return;
}
ListNode* middle = FindMiddlePoint(head, end);
TreeNode* treeNode = new TreeNode(middle->val);
if(childType == LEFT)
{
parent->left = treeNode;
}
else
{
parent->right = treeNode;
}
MakeSubTree(head, middle, treeNode, LEFT);
MakeSubTree(middle->next, end, treeNode, RIGHT);
}
ListNode* FindMiddlePoint(ListNode* head, ListNode* end)
{
int length = ;
ListNode* node = head;
while(node != end)
{
++length;
node = node->next;
}
length /= ;
node = head;
for(int i = ; i < length; ++i)
{
node = node->next;
}
return node;
}
};
sortedListToBST
Judge Small和Judge Large皆顺利通过。
[LeetCode 109] - 将已排序链表转换为二叉搜索树 (Convert Sorted List to Binary Search Tree)的更多相关文章
- LeetCode 108. 将有序数组转换为二叉搜索树(Convert Sorted Array to Binary Search Tree) 14
108. 将有序数组转换为二叉搜索树 108. Convert Sorted Array to Binary Search Tree 题目描述 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索 ...
- [Swift]LeetCode109. 有序链表转换二叉搜索树 | Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- [Swift]LeetCode108. 将有序数组转换为二叉搜索树 | Convert Sorted Array to Binary Search Tree
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...
- [Leetcode 108]有序数组转二叉搜索树Convert Sorted Array to Binary Search Tree
[题目] 给出的升序排序的数组,个数必为奇数,要求形成二叉搜索(平衡)树. [思路] 辅助函数fun,[0,len]=>[0,mid-1]+[mid+1,len]. 当left>right ...
- LeetCode(109):有序链表转换二叉搜索树
Medium! 题目描述: 给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树. 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1. 示例: ...
- [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 bala ...
- [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 bala ...
- Convert Sorted List to Binary Search Tree——将链表转换为平衡二叉搜索树 &&convert-sorted-array-to-binary-search-tree——将数列转换为bst
Convert Sorted List to Binary Search Tree Given a singly linked list where elements are sorted in as ...
- [LeetCode] 108. Convert Sorted Array to Binary Search Tree 把有序数组转成二叉搜索树
Given an array where elements are sorted in ascending order, convert it to a height balanced BST. Fo ...
随机推荐
- 让IE6,7,8支持HTML5新标签的方法
很多网站对网页进行重构的时候,提高标签的语义性,在网页中大量使用了section,article,header等HTML5新标签.考虑到目前win7自带的IE浏览器版本是IE8,而IE8不支持HTML ...
- awk--动作(action)
摘要 在awk--简述中我们讲到awk是由pattern-action组合而成的,关于pattern我们已经awk--模式(pattern)在讲述,接下来就来看下awk的action. 动作是什么 我 ...
- 数据结构 - 求二叉树中结点的最大距离(C++)
// ------BTreeMaxNodeLength.cpp------ #include <iostream> using namespace std; template <cl ...
- Nmap扫描教程之DNS服务类
Nmap扫描教程之DNS服务类 Nmap DNS服务类 DNS(Domain Name System,域名系统)的作用就是将主机名解析为相应IP地址的过程. 通常主机域名的一般结构为:主机名.三级域名 ...
- [Redux] Store Methods: getState(), dispatch(), and subscribe()
console.clear(); const counter = (state = 0, action) => { switch (action.type) { case 'INCREMENT' ...
- Cocos2d-x 3.x 头像选择,本地相册图片+图片编辑(Android、IOS双平台)
大连游戏产业不是很发达,最后,选择一个应用程序外包公司.积累的工作和学习过程中的一点业余生活微信体验,我想分享的游戏小朋友的爱. 在应用开发过程中会经常实用户上传头像的功能,在网上找了N多资料发现没有 ...
- 高性能 Socket 组件 HP-Socket v3.2.1-RC5 公布
HP-Socket 是一套通用的高性能 TCP/UDP Socket 组件,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C+ ...
- [转] Ubuntu 12.04下LAMP安装配置 (Linux+Apache+Mysql+PHP)
我是一个Linux新手,想要安装一台Ubuntu 12.04版的Linux服务器,用这台服务器上的LAMP套件来运行我自己的个人网站.LAMP套件就是 “Linux+Apache+Mysql+PHP这 ...
- 手机Web网站,设置拒绝电脑访问
最近一段时间,都在使用Jquery-Mobile + MVC做手机Web,有一些心得.体会 下面介绍如何拒绝电脑访问手机网站 电脑的浏览器,跟手机的浏览器内核不一样,这是我设置拒绝访问的思路. 下面是 ...
- 执行oracle函数的四种方法
1.在定义函数时:如果有参数,则参数可有类型但是不加长度. 2.在执行函数: var/variable var_name var_type(如果数据类型是number则没有长度,如果数据类型是varc ...