LeetCode 99 恢復二叉搜尋樹

2022-03-26 04:45:49 字數 1586 閱讀 6449

difficulty:困難

給你二叉搜尋樹的根節點root,該樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。

高階:使用 o(n) 空間複雜度的解法很容易實現。你能想出乙個只使用常數空間的解決方案嗎?

示例 1:

輸入:root = [1,3,null,null,2]

輸出:[3,1,null,null,2]

解釋:3 不能是 1 左孩子,因為 3 > 1 。交換 1 和 3 使二叉搜尋樹有效。

示例 2:

輸入:root = [3,1,4,null,null,2]

輸出:[2,1,4,null,null,3]

解釋:2 不能在 3 的右子樹中,因為 2 < 3 。交換 2 和 3 使二叉搜尋樹有效。

solution

language:全部題目

對樹做一次中序遍歷就能找到兩個位置不正確的兩個節點,解法參考:python easy to understand solutions - leetcode discuss

# definition for a binary tree node.

# class treenode:

#     def __init__(self, val=0, left=none, right=none):

#         self.val = val

#         self.left = left

#         self.right = right

class solution:

def recovertree(self, root):

pre = first = second = none

stack =

​        while true:

while root:

root = root.left

if not stack:

break

node = stack.pop()

if not first and pre and pre.val > node.val:  # 當第乙個節點first找到之後這個if條件便不再滿足了

first = pre

if first and pre and pre.val > node.val:

second = node

pre = node

root = node.right

​        first.val, second.val = second.val, first.val

Leetcode99 恢復二叉搜尋樹

第一次寫這個部落格以後我發現我理解錯了題目,但是我的問題更具有一般性,更複雜,所以文章就不改了 題目 只有兩個結點被錯誤的交換。我的 有任意多個結點被錯誤的交換。先分析題目 使用o n 空間複雜度的解法很容易實現,那麼我們先看看很容易實現是怎實現的。1 中序遍歷二叉樹,並將中序序列儲存在乙個陣列nu...

LeetCode 99 恢復二叉搜尋樹

3 1 2示例 2 輸入 3,1,4,null,null,2 3 1 4 2 輸出 2,1,4,null,null,3 2 1 4 3 高階 使用 o n 空間複雜度的解法很容易實現。你能想出乙個只使用常數空間的解決方案嗎?1.中序遍歷,儲存陣列 2.排序陣列 3.重新賦值,恢復二叉樹 includ...

LeetCode99 恢復二叉搜尋樹

二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。樹節點的定義 definition for a binary tree node.public class treenode treenode int val treenode int val,treenode left,tr...