leetcode-1382. 將二叉搜尋樹變平衡
- 將二叉搜尋樹變平衡
給你一棵二叉搜尋樹,請你返回一棵 平衡後 的二叉搜尋樹,新生成的樹應該與原來的樹有著相同的節點值。
如果一棵二叉搜尋樹中,每個節點的兩棵子樹高度差不超過 1 ,我們就稱這棵二叉搜尋樹是 平衡的 。
如果有多種構造方法,請你返回任意一種。
示例:
輸入:root = [1,null,2,null,3,null,4,null,null]
輸出:[2,1,3,null,null,null,4]
解釋:這不是唯一的正確答案,[3,1,4,null,2,null,null] 也是一個可行的構造方案。
提示:
樹節點的數目在 1 到 10^4 之間。
樹節點的值互不相同,且在 1 到 10^5 之間。
思路:
樹的問題用的最多的就是遞迴求解:
先用中序遍歷把原來的二叉樹的元素放到vals陣列裡面,然後從下到上那個構造二叉平衡。
二叉平衡樹的要求:左右子樹的高度差不能 > 1
構造BST的時候,m妨礙中間,遞迴從下往上構建,書的問題一般都用遞迴,看程式碼
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def balanceBST(self, root: TreeNode) -> TreeNode:
vals = []
def inorder(root: TreeNode):
if not root:
return None
inorder(root.left)
vals.append(root.val)
inorder(root.right)
def build(l: int, r: int): # 構建從L到R的BST
if l > r:
return None
m = int(l + (r-l)/2) # 因為m的座標是中間位置,可以保證BSt的性質
root = TreeNode(vals[m])
root.left = build(l, m-1)
root.right = build(m+1, r)
return root
inorder(root)
return build(0, len(vals)-1)
相關文章
- 手寫AVL平衡二叉搜尋樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 演算法與資料結構——AVL樹(平衡二叉搜尋樹)演算法資料結構
- 二叉搜尋樹
- 看動畫學演算法之:平衡二叉搜尋樹AVL Tree動畫演算法
- 從二分搜尋到二叉搜尋樹
- Day20 | 654.最大二叉樹 、 617.合併二叉樹 、 700.二叉搜尋樹中的搜尋 98.驗證二叉搜尋樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 程式碼隨想錄day18 || 530 二叉搜尋樹最小差,501 二叉搜尋樹眾數,236 二叉搜尋樹最近公共祖先
- 二叉搜尋樹的操作集
- 二叉搜尋樹的結構
- javascript實現二叉搜尋樹JavaScript
- 有序表和搜尋二叉樹二叉樹
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 程式碼隨想錄 第23天 | 669. 修剪二叉搜尋樹 ● 108.將有序陣列轉換為二叉搜尋樹 ● 538.把二叉搜尋樹轉換為累加樹 ● 總結篇陣列
- 平衡二叉樹二叉樹
- Leetcode 700. 二叉搜尋樹中的搜尋(DAY 2)LeetCode
- Python教程:將有序陣列轉換為二叉搜尋樹Python陣列
- LeetCode將有序陣列轉化為二叉搜尋樹--JavaLeetCode陣列Java
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 二叉搜尋樹的python實現Python
- 演算法篇 - 二叉搜尋樹演算法
- 96. 不同的二叉搜尋樹
- 【資料結構】二叉搜尋樹!!!資料結構
- 資料結構-二叉搜尋樹資料結構
- leetcode 700. 二叉搜尋樹中的搜尋 思考分析LeetCode
- 排序二叉樹和平衡二叉樹排序二叉樹
- LeetCode 108. 將有序陣列轉換為二叉搜尋樹LeetCode陣列
- LeetCode-108-將有序陣列轉換為二叉搜尋樹LeetCode陣列
- 程式碼隨想錄演算法訓練營day23 | leetcode 669. 修剪二叉搜尋樹、108. 將有序陣列轉換為二叉搜尋樹、538. 把二叉搜尋樹轉換為累加樹演算法LeetCode陣列
- 程式碼隨想錄演算法訓練營,9月17日 | 669. 修剪二叉搜尋樹,108.將有序陣列轉換為二叉搜尋樹,538.把二叉搜尋樹轉換為累加樹演算法陣列
- 程式碼隨想錄演算法訓練營第23天 | 669. 修剪二叉搜尋樹、108.將有序陣列轉換為二叉搜尋樹、538.把二叉搜尋樹轉換為累加樹演算法陣列
- 平衡二叉樹(AVL)二叉樹
- python 二叉樹深度優先搜尋和廣度優先搜尋Python二叉樹
- 資料結構之「二叉搜尋樹」資料結構
- LeetCode 95 | 構造出所有二叉搜尋樹LeetCode