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二叉樹
- 二叉樹 & 二叉查詢樹二叉樹
- LeetCode-199-二叉樹的右檢視LeetCode二叉樹
- leetcode 199. 二叉樹的右檢視LeetCode二叉樹
- LeetCode199.二叉樹的右檢視LeetCode二叉樹
- 排序二叉樹和平衡二叉樹排序二叉樹
- 二叉查詢樹(二叉排序樹)排序
- 二叉樹(順序儲存二叉樹,線索化二叉樹)二叉樹
- 手擼二叉樹——二叉查詢樹二叉樹
- 手擼二叉樹——AVL平衡二叉樹二叉樹
- 資料結構之樹結構概述(含滿二叉樹、完全二叉樹、平衡二叉樹、二叉搜尋樹、紅黑樹、B-樹、B+樹、B*樹)資料結構二叉樹
- 二叉樹二叉樹
- 二叉樹的應用(1)--二叉樹排序樹基本操作二叉樹排序
- 判斷二叉樹是否為滿二叉樹二叉樹
- 資料結構中的樹(二叉樹、二叉搜尋樹、AVL樹)資料結構二叉樹
- 自己動手作圖深入理解二叉樹、滿二叉樹及完全二叉樹二叉樹
- 二叉樹、B樹以及B+樹二叉樹
- 平衡二叉樹,B樹,B+樹二叉樹
- 深入學習二叉樹 (一) 二叉樹基礎二叉樹
- 相同二叉樹和鏡面二叉樹問題二叉樹
- 判斷某棵二叉樹是否二叉排序樹二叉樹排序
- 平衡二叉樹(AVL樹)和 二叉排序樹轉化為平衡二叉樹 及C語言實現二叉樹排序C語言
- 樹和二叉樹簡介二叉樹
- n叉樹vs二叉樹二叉樹
- Chapter 3 樹與二叉樹APT二叉樹
- 樹(2)--二叉樹的遍歷(非遞迴)+線索二叉樹二叉樹遞迴
- 迭代二叉樹二叉樹
- 二叉樹深度二叉樹
- 重建二叉樹二叉樹
- javascript二叉樹JavaScript二叉樹
- 平衡二叉樹二叉樹
- 二叉樹---深度二叉樹
- Java二叉樹Java二叉樹
- JS二叉樹JS二叉樹
- 二叉排序樹排序
- 二叉樹——高度二叉樹