zoukankan      html  css  js  c++  java
  • LeetCode 109. 有序链表转换二叉搜索树(Convert Sorted List to Binary Search Tree)

    题目描述

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

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

    示例:

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

    解题思路

    转换二叉搜索树分为以下两步:

    • 首先找到链表中间节点以及它的前一个节点,可以利用快慢指针的思想,接着以中间节点构造二叉搜索树的根节点,划分其左右两边分别为左右子树
    • 然后断开根节点两边的链表,递归的构造子树,注意若子树只有两个节点,只需以首节点为根构造右子节点为其后节点的子树

    代码

     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 a binary tree node.
    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 == NULL) return NULL;
    22         if(head->next == NULL) return new TreeNode(head->val);
    23         ListNode *fast = head, *slow = head, *pre = head;
    24         while(fast->next && fast->next->next){
    25             fast = fast->next->next;
    26             pre = slow;
    27             slow = slow->next;
    28         }
    29         TreeNode *root = new TreeNode(slow->val);
    30         if(slow != pre){
    31             pre->next = NULL;
    32             root->left = sortedListToBST(head);
    33         }
    34         root->right = sortedListToBST(slow->next);
    35         return root;
    36     }
    37 };
  • 相关阅读:
    FZU 2112 并查集、欧拉通路
    HDU 5686 斐波那契数列、Java求大数
    Codeforces 675C Money Transfers 思维题
    HDU 5687 字典树插入查找删除
    HDU 1532 最大流模板题
    HDU 5384 字典树、AC自动机
    山科第三届校赛总结
    HDU 2222 AC自动机模板题
    HDU 3911 线段树区间合并、异或取反操作
    CodeForces 615B Longtail Hedgehog
  • 原文地址:https://www.cnblogs.com/wmx24/p/9449320.html
Copyright © 2011-2022 走看看