這個方法是遞迴方式的中序遍歷的變式
因為二叉搜尋樹的中序遍歷一定是從小到大的
通過分析題目所說的錯誤的二叉樹的中序遍歷我們可以知道
需要交換的兩個節點是
原始的中序遍歷
private
void
inorder
(treenode root)
// 左根右的順序遍歷
inorder
(root.left)
; system.out.
println
("遍歷根節點");
inorder
(root.right)
;}
現在只需要在遍歷根節點的地方做修改,將上述說的兩個節點找出來然後交換值即可
class
solution
recover
(root)
;swap()
;}private
void
swap()
private
void
recover
(treenode root)
recover
(root.left);if
(temp == null)
else
if(first != null && temp.val >= root.val)
temp = root;
// 更新當前遍歷的節點
}recover
(root.right);}
}
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 20 8 8 恢復二叉搜尋樹
題目鏈結 leetcode99 分析 看了題解做的,一開始想遍歷樹找到不符合的乙個節點並在樹中再次遍歷找另乙個,後來發現是一團糟。看了題解之後發現只要利用bst中序遍歷是有序的特點就能思路清晰的做。如題解所說,有三種解法,時間複雜度都是o n 空間複雜度分別是o n o h o 1 三者都利用了二叉...
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 ...