Convert Sorted Array to Binary Search Tree有序數列構建BST

Easy

給定升序的有序數列,簡歷高度平衡的二叉搜索樹。

Solution:

什么是二叉搜索樹?

left_subtree (keys) ≤ node (key) ≤ right_subtree (keys)

二叉搜索樹

什么是高度平衡樹?

空樹平衡,非空二叉樹滿足下面條件時為平衡:

  • 左分支平衡
  • 右分支平衡
  • 左右分支樹的高度差不大于1

所以上圖其實也是一棵高度平衡樹。

知道了高度平衡二叉搜索樹的定義,那么思路就比較清晰了。

  1. 找有序序列中間的值作為樹的根節點。如果有序數列含有偶數個值應該選中間兩個數的哪個呢?答案是無所謂的,因為都可以構建成功,這道題的答案不唯一。
  2. 對中間數的左邊序列和右邊序列重復1。
# 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 sortedArrayToBST(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        try:
            mid_index = len(nums)/2
            root = TreeNode(nums[mid_index])
            root.left = self.sortedArrayToBST(nums[:mid_index])
            root.right = self.sortedArrayToBST(nums[mid_index+1:])
            return root
        except:
            return None
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,489評論 1 31
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個結點至多有m個孩子。 除根結點和葉子結點外,其它每個結點至少有m...
    文檔隨手記閱讀 13,345評論 0 25
  • 原文出處:http://www.cnblogs.com/maybe2030/p/4715035.html引文出處:...
    明教de教主閱讀 9,220評論 0 7
  • 因為之前就復習完數據結構了,所以為了保持記憶,整理了一份復習綱要,復習的時候可以看著綱要想具體內容。 樹 樹的基本...
    牛富貴兒閱讀 7,004評論 3 10
  • 目錄 [1. 順序查找][2. 二分查找][3. 插值查找][4. 斐波那契查找][5. 樹表查找][6. 分塊查...
    jiangmo閱讀 17,827評論 4 6