二叉搜尋樹中的兩個節點被錯誤地交換。
請在不改變其結構的情況下,恢復這棵樹。
示例:
例 1:bst 性質:中序遍歷的結果為乙個有序序列。因此我們將樹看作有序陣列。輸入: [1,3,null,null,2]
輸出: [3,1,null,null,2]1 /3
\ 2
例 2:3 /1
\ 2
輸入: [3,1,4,null,null,2]
輸出: [2,1,4,null,null,3]3
/ \
1 4
/2
2
/ \
1 4
/3
兩個例子:[1,3,2,4]、[4,2,3,1]
在中序遍歷中,只需要利用乙個 pre 節點和當前節點比較,如果 pre 節點的值大於當前節點的值,那麼就是我們要找的逆序的數字。分別用兩個指標 first 和 second 儲存即可。如果找到第二組逆序的數字,我們就把 second 更新為當前節點。最後把 first 和 second 兩個的數字交換即可。
**:
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
else
pre = root;
order
( root-
>right);}
void
recovertree
(treenode* root)
};
Leetcode 每日一題 恢復二叉搜尋樹
level hard 題目 二叉搜尋樹中的兩個節點被錯誤地交換。請在不改變其結構的情況下,恢復這棵樹。示例 高階 使用 o n 空間複雜度的解法很容易實現。你能想出乙個只使用常數空間的解決方案嗎?思路 要充分利用二叉搜尋樹的特性。二叉搜尋樹的中序遍歷得到的序列是遞增。假設遞增序列 a 1,2,3,4...
每日刷題 不同的二叉搜尋樹II
給定乙個整數 n,生成所有由 1 n 為節點所組成的二叉搜尋樹。示例 輸入 3 輸出 1,null,3,2 3,2,null,1 3,1,null,null,2 2,1,3 1,null,2,null,3 解釋 以上的輸出對應以下 5 種不同結構的二叉搜尋樹 1 3 3 2 1 3 2 1 1 3 ...
每日刷題 有序鍊錶轉換二叉搜尋樹
給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點的左右兩個子樹的高度差的絕對值不超過 1。示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 3 ...