99. 恢复二叉搜索树
生活随笔
收集整理的這篇文章主要介紹了
99. 恢复二叉搜索树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
root 是一棵錯誤的二叉搜索樹(有2個節點被錯誤交換)
發生在逆序對的頭,尾這兩個位置
第2個錯誤節點:最后一個逆序對中較小的那個節點 second
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/ class Solution {// 中序遍歷:時間復雜度O(n)、空間復雜度O(1)/*** 上一次中序遍歷過的節點*/private TreeNode prev;/*** 第一個錯誤節點*/private TreeNode first;/*** 第二個錯誤節點*/private TreeNode second;private void find(TreeNode node) {// 出現了逆序對if (prev != null && prev.val > node.val) {// 第2個錯誤節點:最后一個逆序對中較小的那個節點second = node;// 第1個錯誤節點:第一個逆序對中較大的那個節點if (first != null) return;first = prev;}prev = node;}/*** @param root 是一棵錯誤的二叉搜索樹(有2個節點被錯誤交換)*/public void recoverTree(TreeNode root) {findWrongNodes(root);// 交換2個錯誤節點的值int tmp = first.val;first.val = second.val;second.val = tmp;}private void findWrongNodes(TreeNode root) {if (root == null) return;findWrongNodes(root.left);find(root);findWrongNodes(root.right);} }?
總結
以上是生活随笔為你收集整理的99. 恢复二叉搜索树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: atomic底层实现是基于无锁算法cas
- 下一篇: 50. Pow(x, n)