leetcode 99 恢復二叉搜尋樹(二叉樹)

2021-09-25 13:35:24 字數 1034 閱讀 8039

二叉搜尋樹中的兩個節點被錯誤地交換。

請在不改變其結構的情況下,恢復這棵樹。

示例 1:

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

1/ 3

\ 2

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

3/ 1

\ 2

示例 2:

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

3 / \

1 4

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

2 / \

1 4/3

高階:對正確的二叉搜尋樹進行中序遍歷,那麼節點系列將會一直公升序;如果兩個節點的位置錯了,一定會出現降序。

(1)如果在中序遍歷時節點值出現了兩次降序,第乙個錯誤的節點為第一次降序時較大的節點,第二個錯誤的節點為第二次降序時較小的節點

(1)如果只出現一次降序,則就是這兩個節點

採用中序遍歷就可以完成題目要求,遞迴/非遞迴/morris遍歷都可以。以下採用非遞迴方式。

複雜度分析

時間複雜度:o(n)

空間複雜度:o(h)

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...