日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)

發布時間:2023/12/4 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

高度平衡的二叉搜索樹(平衡二叉樹),定義見此Leetbook。簡單來說,就是基于相同節點值構建出來的二叉搜索樹中高度最小的,即為平衡二叉樹(不唯一)。有 N 個節點的平衡二叉搜索樹,它的高度是 logN 。并且,每個節點的兩個子樹的高度不會相差超過 1。

110. 平衡二叉樹

class Solution:def isBalanced(self, root: TreeNode) -> bool:def height(node: TreeNode) -> int:if not node:return 0leftHeight = height(node.left)rightHeight = height(node.right)if leftHeight == -1 or rightHeight == -1 or abs(leftHeight - rightHeight) > 1:return -1else:return max(leftHeight, rightHeight) + 1return height(root) >= 0

自底向上的遞歸,類似于后序遍歷,此節點不平衡或者其左子樹或右子樹不平衡就都返回-1,否則返回樹的高度。

108. 將有序數組轉換為二叉搜索樹(面試題 04.02. 最小高度樹)

class Solution:def sortedArrayToBST(self, nums: List[int]) -> TreeNode:if not nums:return Nonemid = len(nums) // 2root = TreeNode(nums[mid])root.left = self.sortedArrayToBST(nums[:mid])root.right = self.sortedArrayToBST(nums[mid+1:])return root

從有序遞增數組創建一棵高度平衡的二叉搜索樹、或平衡二叉樹、或高度最小的二叉搜索樹。方法是每次取中位數創建節點,然后左邊比它小的是左子樹,右邊比它大的是右子樹,遞歸。此題思路寫法都和從遍歷序列構造二叉樹很像,可以參考一下。

1382. 將二叉搜索樹變平衡

class Solution:def balanceBST(self, root: TreeNode) -> TreeNode:def inorder(node: TreeNode):if not node:return Noneinorder(node.left)nums.append(node.val)inorder(node.right)nums = []inorder(root)def creatBST(numlist) -> TreeNode:if not numlist:return Nonemid = len(numlist) // 2node = TreeNode(numlist[mid])node.left = creatBST(numlist[:mid])node.right = creatBST(numlist[mid+1:])return nodereturn creatBST(nums)

與上一題思路一樣,只不過這里需要我們自己對二叉樹進行中序遍歷得到遞增序列,再將數組轉換為平衡二叉樹。這題的官方題解給出了貪心的證明。

總結

以上是生活随笔為你收集整理的高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。