有序链表转换二叉搜索树(python)

题目描述:

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

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

示例:

给定的有序链表:[-10,-3,0,5,9],

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

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def sortedListToBST(self, head):
        """
        :type head: ListNode
        :rtype: TreeNode
        """
        #思路:首先,需要将head变为list格式进行保存;找到head对应list列表的中间位置,以其作为二叉搜索树的根节点,构造一个函数,其功能为:输入一个节点和两个列表(分别为左子树列表和右子树列表)继续向下构造左右子树,其终止条件为左子树列表为空和右子树列表为空
        if head == None:
            return None
        
        list_ = []
        while head != None:
            list_.append(head.val)
            head = head.next
            
        #对构造平衡的二叉搜索树的函数定义
        def constructTree(node,left_tree,right_tree):
            if len(left_tree) != 0:
                node.left = TreeNode(left_tree[len(left_tree)/2])
                constructTree(node.left,left_tree[:len(left_tree)/2],left_tree[len(left_tree)/2+1:])
            if len(right_tree) != 0:
                node.right = TreeNode(right_tree[len(right_tree)/2])
                constructTree(node.right,right_tree[:len(right_tree)/2],right_tree[len(right_tree)/2+1:])
        
        tree = TreeNode(list_[len(list_)/2])
        constructTree(tree,list_[:len(list_)/2],list_[len(list_)/2+1:])
        
        return tree

菜鸟一枚,代码仅供参考,如有问题,望指正~

你可能感兴趣的:(Python)