class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 如果第一個節點沒有找到,第一個就等於前一個節點大於root節點的前一個節點
# 如果第一個節點已經找到,第二個就等於前一個節點大於root節點的root節點
class Solution:
def recoverTree(self, root: TreeNode) -> None:
"""
Do not return anything, modify root in-place instead.
"""
self.firstNode = None
self.secondNode = None
self.preNode = TreeNode(float("-inf"))
self.dfs(root)
self.firstNode.val,self.secondNode.val = self.secondNode.val,self.firstNode.val
def dfs(self,root):
if not root:
return
self.dfs(root.left)
if self.firstNode == None and self.preNode.val > root.val:
self.firstNode = self.preNode
if self.firstNode and self.preNode.val > root.val:
self.secondNode = root
self.preNode = root
self.dfs(root.right)
99恢復二叉樹
相關文章
- LeetCode-099-恢復二叉搜尋樹LeetCode
- 【LeetCode擊敗99%+】二叉樹路徑總和LeetCode二叉樹
- 滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹(二叉查詢樹)和最優二叉樹二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 樹和二叉樹簡介二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- n叉樹vs二叉樹二叉樹
- 重建二叉樹二叉樹
- 二叉樹深度二叉樹
- 迭代二叉樹二叉樹
- javascript二叉樹JavaScript二叉樹
- 12、二叉樹二叉樹
- 滿二叉樹二叉樹
- 平衡二叉樹二叉樹
- Java二叉樹Java二叉樹
- 二叉樹---深度二叉樹
- 二叉樹的子結構、深度以及重建二叉樹二叉樹
- js實現完全排序二叉樹、二叉搜尋樹JS排序二叉樹
- 二叉搜尋樹和二叉樹的最近公共祖先二叉樹
- 資料結構(樹):二叉樹資料結構二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- JavaScript 二叉搜尋樹以及實現翻轉二叉樹JavaScript二叉樹
- 程式碼隨想錄——二叉樹-12.平衡二叉樹二叉樹
- 5分鐘瞭解二叉樹之二叉查詢樹二叉樹