Leetcode 99 恢復二叉樹

2022-08-20 12:30:11 字數 657 閱讀 2413

題目描述:

題解:找規律,題目限制了只交換兩個節點,那麼在中序遍歷的時候,用pre存中序遍歷的前乙個節點,如果當前節點(記為now)的值小於pre的值,那麼now,pre中有乙個是需要交換的節點。我們注意到,第一次出現上述情況的pre為需要交換的第乙個節點,第二次出現上述情況的now節點為需要交換的第二個節點。當交換的節點為中序遍歷中相鄰的節點的時候,在比較的時候只會出現一次上述情況,將pre,now都記錄下來即可。

ac**:

class

solution

else}}

pre =root;

treenode* end = inorder(root->right);

if(end == null) return

root;

return

end;

}void recovertree(treenode*root)

private

:

intflag;

treenode*node;

treenode*node2;

treenode*pre;

};

leetcode 99 恢復二叉樹搜尋樹

二叉搜尋樹的中序遍歷就是遞增序列,所以我們只要找到被替換樹的中序過程中違反遞增規律的節點就可以了。替換後 有兩種情況 1,1,3,2,4 2,4,2,3,1 第一種情況 替換3和2的值。第二種情況 替換4和1的值。在中序遍歷樹的過程中,只要我們發現逆序數對並且用兩個值x,y記錄逆序數對的兩個值。在第...

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

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

Leetcode99 恢復二叉搜尋樹

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