99. Recover Binary Search Tree

来源:互联网 发布:linux ftp和vsftp 编辑:程序博客网 时间:2024/06/05 04:00

Two elements of a binary search tree (BST) are swapped by mistake.

Recover the tree without changing its structure.

Note:
A solution using O(n) space is pretty straight forward. Could you devise a constant space solution?


这次真的是原创,一次通过 hard题目

刚听完牛客网的讲座。 大致讲了一下这个题目

大意是这样的,有一个二叉搜索树的两个节点反了。需要把这两个节点反过来。

反过来的意思就是把两个节点的值交换一下 这个很重要!  不是换节点,不用理会它的父节点 子节点


二叉搜索树 核心就是左边比右边小。也就是中序遍历的结果,所以进行中序遍历,记录去遍历的前一个节点和当前节点如果当前节点比前一个节点小那么这就是涉及到交换的一个节点。

可能有两种情况 1. 12345—14325  

     2.  12345—13245

即交换的两个节点原本可能相邻或者不相邻,可以统一起来,用一个First节点来记录遍历到的第一个降序列的第一个元素,如果first是空说明这是第一次出现降序列记录下来,如果不是空说明已经出现过这不是第一次first不变。 用Last来记录每次出现降序列的后一个节点那么可以保证最后得到的last一定是最后一个降序列的第二个节点也就是涉及到mistake的节点。把这连个节点记录下来交换值


public class Solution {    TreeNode First,Last,pre;    public void recoverTree(TreeNode root) {        inorder(root);        int temp=First.val;        First.val=Last.val;        Last.val=temp;    }    public void inorder(TreeNode root){        if(root.left!=null){            inorder(root.left);        }        if(pre==null) pre=root;        if(root.val<pre.val){            if(First==null){                First=pre;            }            Last=root;        }        else pre=root;        if(root.right!=null){            inorder(root.right);        }            }}


0 0
原创粉丝点击