LeetCode: Convert Sorted List to Binary Search Tree [109]

【题目】

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

【题意】

将一个有序链表转换成平衡二叉树

【思路】

思路跟Convert Sorted Array to Binary Search Tree完全一样

【代码】

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:

    ListNode *getMidNode(ListNode *head){
        if(head==NULL || head->next==NULL)return head;
        ListNode* prev=NULL;        //指向pstep1的前一个节点
        ListNode* pstep1=head;      //每次向前移动一步
        ListNode* pstep2=head->next;    //每次向前移动两步
        //对于偶数链表,结束条件是pstep2->next==NULL
        //对于计数链表,结束条件是pstep2==NULL

        while(pstep2!=NULL && pstep2->next!=NULL){
            prev=pstep1;
            pstep1=pstep1->next;
            pstep2=pstep2->next->next;
        }

        //找到链表中间节点的同时,把链表分裂为前后两个独立的链表
        if(prev)prev->next=NULL;

        return pstep1;
    }

    TreeNode *sortedListToBST(ListNode *head) {
       if(head==NULL)return NULL;

       ListNode*mid=getMidNode(head);
       //创建根节点
       TreeNode*root=(TreeNode*)malloc(sizeof(TreeNode));
       root->val=mid->val;
       //创建左子树
       TreeNode*left=NULL;
       if(mid!=head)
            left=sortedListToBST(head);
       //创建右子树
       TreeNode*right=sortedListToBST(mid->next);
       //构造二叉树
       root->left=left;
       root->right=right;

       return root;

    }
};

LeetCode: Convert Sorted List to Binary Search Tree [109]

时间: 2024-10-17 19:38:19

LeetCode: Convert Sorted List to Binary Search Tree [109]的相关文章

[leetcode]Convert Sorted List to Binary Search Tree @ Python

原题地址:http://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 题意:将一条排序好的链表转换为二叉查找树,二叉查找树需要平衡. 解题思路:两个思路:一,可以使用快慢指针来找到中间的那个节点,然后将这个节点作为树根,并分别递归这个节点左右两边的链表产生左右子树,这样的好处是不需要使用额外的空间,坏处是代码不够整洁.二,将排序好的链表的每个节点的值存入一个数组中,这样就和http://www.cnblog

[leetcode]Convert Sorted Array to Binary Search Tree @ Python

原题地址:http://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题意:将一个排序好的数组转换为一颗二叉查找树,这颗二叉查找树要求是平衡的. 解题思路:由于要求二叉查找树是平衡的.所以我们可以选在数组的中间那个数当树根root,然后这个数左边的数组为左子树,右边的数组为右子树,分别递归产生左右子树就可以了. 代码: # Definition for a binary tree node # class

[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 balanced BST. 方法:为了使BST高度平衡,要找链表中的中值作为当前根节点. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) :

LeetCode: Convert Sorted Array to Binary Search Tree [108]

[题目] Given an array where elements are sorted in ascending order, convert it to a height balanced BST. [题意] 给定一个已排序的数组(不存在重复元素),将它转换成一棵平衡二叉搜索树. [思路] 由于平衡二叉树要求左右子树的高度差绝对值相遇等于1,也就是说左右子树尽可能包含相同数目节点. 则使用二分法来解本题即可. [代码] /** * Definition for binary tree *

[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 balanced BST. 这道题是要求把有序链表转为二叉搜索树,和之前那道Convert Sorted Array to Binary Search Tree 将有序数组转为二叉搜索树思路完全一样,只不过是操作的数据类型有所差别,一个是数组,一个是链表.数组方便就方便在可以通过index直接访问任意一个元

LeetCode: Convert Sorted Array to Binary Search Tree 解题报告

Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending order, convert it to a height balanced BST.SOLUTION 1:使用递归解决. base case: 当索引值超过时,返回null. 递归主体:构造根节点,调用递归构造左右子树.并将左右子树挂在根节点上. 返回值:返回构造的根节点. GITHUB: https:

LeetCode——Convert Sorted Array to Binary Search Tree

Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 原题链接:https://oj.leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 题目:给定一个升序排列元素的数组,将其转换成高度平衡的二叉树. 思路:已经排序.则从中间劈开,中间元素为树的根,左右递归构建. public

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 balanced BST. 原题链接:https://oj.leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 题目:给定一个有正序链表,将其转换成一个二叉搜索树. 思路:能够依照之前的数组的思路来做.即找到中间值.再左右递归建树

[LeetCode] Convert Sorted List to Binary Search Tree DFS,深度搜索

Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. Hide Tags Depth-first Search Linked List 这题是将链表变成二叉树,比较麻烦的遍历过程,因为链表的限制,所以深度搜索的顺序恰巧是链表的顺序,通过设置好递归函数的参数,可以在深度搜索时候便可以遍历了. TreeNode * help_f(Lis