*LeetCode-Recover Binary Search Tree

来源:互联网 发布:mobi 阅读器 mac 编辑:程序博客网 时间:2024/05/16 14:40

找到需要swap的两个node 就是inorder traversal 然后发现两个不是增序的点 每个和他的前一个数比 第一个不对的点是 a > b就是a  第二个数是a<b就是b

记录一个prev 一个first一个sec

最后两个node的swap不需要挪动指针 只要改node的值就好了

public class Solution {    public TreeNode prev = new TreeNode ( Integer.MIN_VALUE );    public TreeNode first;    public TreeNode second;        public void recoverTree(TreeNode root) {        if ( root == null )            return;        traverse ( root );        int val = first.val;        first.val = second.val;        second.val = val;    }    public void traverse (TreeNode root) {        if ( root == null )            return;        traverse ( root.left );        if ( first == null && prev.val >= root.val )            first = prev;        if ( first != null && prev.val >= root.val )            second = root;        prev = root;        traverse ( root.right );    }}



0 0