leetcode 99 恢復二叉搜尋樹

2022-03-14 03:08:25 字數 740 閱讀 6028

99. 恢復二叉搜尋樹

一開始想了好久沒有什麼好思路,去網上搜了一下,原來是中序遍歷。

二叉搜尋樹的中序遍歷是個(遞增)有序數列,利用這個特性,我們可以很巧妙的解決這個題。

先看第二個例子,中序遍歷後是:13245,觀察發現只有一處發生了降序,只在第二位與第三位發生了降序情況,說明這兩個數為異常數,交換3和2的位置重新中序遍歷:12345

第乙個例子,中序遍歷是:321,觀察發現有兩處發生了降序,第一到第二位,以及第二到第三位,這種情況下交換第一位與第三位即可

實際上題目中只有兩個節點被交換了,所以降序情況最多也只會出現兩處。所以分兩種情況處理即可。

我們再造個例子,看的更直觀點:

[10 17 15 1 8 12 5]
中序遍歷

1 17 8 10 12 15 5
17與3發生了降序,15與5發生了降序,我們將第乙個降序的前乙個元素與第二個降序的後乙個元素,進行交換即可。

當只有一次降序出現時(可以理解為兩個降序擠到了一塊嘛),降序的前乙個元素與降序的後乙個元素,進行交換即可。

**

class solution 

last = root;

middle(root.right);

}public void recovertree(treenode root)

}

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