前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 109. 有序链表转换二叉搜索树(快慢指针+递归)

LeetCode 109. 有序链表转换二叉搜索树(快慢指针+递归)

作者头像
Michael阿明
发布2020-07-13 14:30:13
4120
发布2020-07-13 14:30:13
举报

1. 题目

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

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree

类似题目 LeetCode 108. 将有序数组转换为二叉搜索树

2. 解题

  • 类似的方法,快慢指针找到链表中点作为树的 root
  • 在中点前断开链表,递归进行
  • 递归终止条件 head 为空,返回 NULL,如果只有一个节点了(head = slow),直接返回head处的值建立的 root
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
class Solution {
public:
    TreeNode* sortedListToBST(ListNode* head) {
        if(!head) return NULL;
        ListNode *slow, *slow_pre, *fast;
        slow = fast = head;
        slow_pre = NULL;
        while(fast && fast->next) 
        {
        	slow_pre = slow;
        	slow = slow->next;
        	fast = fast->next->next;
        }
        if(slow_pre)
        	slow_pre->next = NULL;//断开链表
        if(slow && slow != head)
        {
        	TreeNode *root = new TreeNode(slow->val);
        	root->left = sortedListToBST(head);
        	root->right = sortedListToBST(slow->next);
        	return root;
        }
        return new TreeNode(head->val);
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档