高度平衡的二叉搜索树基础概念与经典题目(Leetcode题解-Python语言)
生活随笔
收集整理的這篇文章主要介紹了
高度平衡的二叉搜索树基础概念与经典题目(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语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: word怎么压缩文件大小怎样压缩word
- 下一篇: 链表基础概念与经典题目(Leetcode