LeetCode(109):有序链表转换二叉搜索树

Medium!

题目描述:

给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。

本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。

示例:

给定的有序链表: [-10, -3, 0, 5, 9],一个可能的答案是:[0, -3, 9, -10, null, 5], 它可以表示下面这个高度平衡二叉搜索树:0/ \-3   9/   /-10  5

解题思路:

这道题是要求把有序链表转为二叉搜索树,和之前那道Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树思路完全一样,只不过是操作的数据类型有所差别,一个是数组,一个是链表。数组方便就方便在可以通过index直接访问任意一个元素,而链表不行。由于二分查找法每次需要找到中点,而链表的查找中间点可以通过快慢指针来操作,可参见之前的两篇博客Reorder List 链表重排序http://www.cnblogs.com/grandyang/p/4254860.html和Linked List Cycle II 单链表中的环之二http://www.cnblogs.com/grandyang/p/4137302.html有关快慢指针的应用。找到中点后,要以中点的值建立一个数的根节点,然后需要把原链表断开,分为前后两个链表,都不能包含原中节点,然后再分别对这两个链表递归调用原函数,分别连上左右子节点即可。

C++解法一:

 1 /**
 2  * Definition for singly-linked list.
 3  * struct ListNode {
 4  *     int val;
 5  *     ListNode *next;
 6  *     ListNode(int x) : val(x), next(NULL) {}
 7  * };
 8  */
 9 /**
10  * Definition for binary tree
11  * struct TreeNode {
12  *     int val;
13  *     TreeNode *left;
14  *     TreeNode *right;
15  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
16  * };
17  */
18 class Solution {
19 public:
20     TreeNode *sortedListToBST(ListNode *head) {
21         if (!head) return NULL;
22         if (!head->next) return new TreeNode(head->val);
23         ListNode *slow = head;
24         ListNode *fast = head;
25         ListNode *last = slow;
26         while (fast->next && fast->next->next) {
27             last = slow;
28             slow = slow->next;
29             fast = fast->next->next;
30         }
31         fast = slow->next;
32         last->next = NULL;
33         TreeNode *cur = new TreeNode(slow->val);
34         if (head != slow) cur->left = sortedListToBST(head);
35         cur->right = sortedListToBST(fast);
36         return cur;
37     }
38 };

 

转载于:https://www.cnblogs.com/ariel-dreamland/p/9162489.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归入门 斐波那契数列

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!《递归入门》斐波那契数列百度百科斐波那契数…

spring初始化bean时执行某些方法完成特定的初始化操作

在项目中经常会在容器启动时&#xff0c;完成特定的初始化操作&#xff0c;如资源文件的加载等。 一 实现的方式有三种&#xff1a; 1.使用PostConstruct注解&#xff0c;该注解作用于void方法上 2.在配置文件中配置init-method方法 <bean id"student" class"…

用栈解决四则运算问题

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;本文章的解决方法参考了《大话数据结构》中关…

源码篇:Python 实战案例----银行系统

import time import random import pickle import osclass Card(object):def __init__(self, cardId, cardPasswd, cardMoney):self.cardId cardIdself.cardPasswd cardPasswdself.cardMony cardMoneyself.cardLock False # 后面到了锁卡的时候需要有个卡的状态class User…

排序算法入门之简单选择排序

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;在学了冒泡排序后&#xff0c;会发觉这种算法…

hdu5279 YJC plays Minecraft 【分治NTT】

题目链接 hdu5279 题解 给出若干个完全图&#xff0c;然后完全图之间首尾相连并成环&#xff0c;要求删边使得两点之间路径数不超过\(1\)&#xff0c;求方案数 容易想到各个完全图是独立的&#xff0c;每个完全图要删成一个森林&#xff0c;其实就是询问\(n\)个点有标号森林的个…

ubuntu12 04下django安装略谈

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;首先你需要肯定你的机子上装了python现在ubu…

React Native 开发环境搭建

1、安装 Python 2&#xff0c;不知道是否已支持 Python 3 2、安装 node&#xff0c;npm。。。 修改 npm 镜像&#xff0c;不建议使用 cnpm&#xff0c;cnpm 安装模块的路径与 npm 有差别 npm config set registry https://registry.npm.taobao.org --global npm config set dis…

递归入门

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;写在前面&#xff1a;对于强大的递归。要想做…

免费的大数据学习资料,这一份就足够

朋友不在于多&#xff0c;知心就好;资料不在于多&#xff0c;精致就好。一份专业的大数据学习资料才是学习大数据的利刃。小编分享的这套大数据学习资料将从学习大纲、书籍、视频教程分别分享。 在这里还是要推荐下我自己建的大数据学习交流群:784557197&#xff0c;群里都是学…

判断一个数是偶数还是奇数

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;《递归入门》交互递归到目前为止&#xff0c…

C语言的fgets 与 gets

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;今天在翻《C语言参考手册》查看文件操作的相…

6月上开发心得

6月上开发心得 团队开发终于走上正轨&#xff0c;我们最终决定在基于ThinkPHP的opensns框架上继续进行网站的开发&#xff0c;为了增加网站的功能&#xff0c;同时避免将网站做成单纯的门户网站&#xff0c;我们在网站中加入了社交功能&#xff0c;即提供一个实验室与学生的交流…

递归入门 阶乘函数

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;《递归入门》对许多人而言&#xff0c;理解递…

Java-Shiro(三):Shiro与Spring MVC集成

新建Java Daynamic Web项目 导入Spring、SpringMVC依赖包&#xff1a; 导入Spring & Spring MVC包&#xff08;导入如下所有开发包&#xff09;&#xff1a; Spring AOP依赖扩展包&#xff1a; 配置Spring &#xff1a; 1&#xff09;修改web.xml导入“#contextLoaderList…

第一个django项目

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;说在前面&#xff0c;这篇文章是为记录下我个…

springcloud20---Config加入eureka

Config server也可以加用户名和密码。Config client通过用户名和密码访问。 Config server也可以做成高可用集群。 Config与eureka配置使用。把Config server注册到eureka。Config client也要注册到eureka。 package com.itmuch.cloud;import org.springframework.boot.SpringA…

字符串右移n位

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;题目&#xff1a;实现字符串右移几位&#x…

mysql中的CURRENT_TIMESTAMP

MySQL的timestamp类型可以使用CURRENT_TIMESTAMP来指定默认值&#xff0c;当记录增、改时&#xff0c;该值会自动取当前时间&#xff0c;如下图所示&#xff1a; 增加或修改记录时&#xff0c;该值自动变化 但是这个跟MySQL的版本及日期的具体类型有关&#xff0c;只有5.6之后的…

C++异常之异常说明

分享一下我老师大神的人工智能教程&#xff01;零基础&#xff0c;通俗易懂&#xff01;http://blog.csdn.net/jiangjunshow也欢迎大家转载本篇文章。分享知识&#xff0c;造福人民&#xff0c;实现我们中华民族伟大复兴&#xff01;为了能够编写适当的catch子句&#xff0c;了…