LeetCode99 20 8 8 恢復二叉搜尋樹

2021-10-08 22:47:13 字數 795 閱讀 9996

題目鏈結:leetcode99

分析:看了題解做的,一開始想遍歷樹找到不符合的乙個節點並在樹中再次遍歷找另乙個,後來發現是一團糟。看了題解之後發現只要利用bst中序遍歷是有序的特點就能思路清晰的做。

如題解所說,有三種解法,時間複雜度都是o(n),空間複雜度分別是o(n),o(h),o(1),三者都利用了二叉搜素樹中序遍歷有序。

第一種是中序遍歷出來,找到交換的點的值,然後遍歷找交換的點直接賦另外的乙個的值。

第二種隱式中序遍歷是儲存乙個中序遍歷的前驅的值,手動實現棧和遞迴的棧原理一樣,都是,一直進入到樹底部,然後一層層返回的。

第三種morris中序遍歷是為了節省棧呼叫的空間,所以把遞迴返回到父節點的那一層的過程變為用左子樹的最右節點來儲存父節點的位址。

如圖,黃色的線和綠色的線代表遍歷的順序,紅色的線代表和左子樹的最右節點(即是中序遍歷父節點的前驅)與父節點鏈結。

當黃色的線到達最右節點時候,紅色的線連線。

綠色的線即是樹的中序遍歷順序。

但是…我的提交從下到上分別是1,2,3種解法

記憶體占用大小是空間複雜度的體現嗎?

LeetCode 恢復二叉搜尋樹

二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。示例 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...

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