美文网首页
LeetCode 第99题:恢复二叉搜索树

LeetCode 第99题:恢复二叉搜索树

作者: 放开那个BUG | 来源:发表于2021-04-17 12:31 被阅读0次

1、前言

题目描述

2、思路

可以利用二叉搜索树的性质,二叉搜索树都是 left < root < right 的,其中序遍历节点的值为递增。题目明确有两个节点是错误的,我们只要找出这两个节点即可。

我们发现,第一个节点总是比后一个节点大,第二个节点总是比前一个节点小,我们可以利用这种性质写代码。

3、代码

class Solution {

    private TreeNode firstNode = null;
    private TreeNode sencondNode = null;
    private TreeNode prev = new TreeNode(Integer.MIN_VALUE);

    public void recoverTree(TreeNode root) {
        inOrder(root);
        int temp = firstNode.val;
        firstNode.val = sencondNode.val;
        sencondNode.val = temp;
    }

    private void inOrder(TreeNode root){
        if(root == null){
            return;
        }

        inOrder(root.left);
        if(firstNode == null && prev.val > root.val){
            firstNode = prev;
        }
        if(firstNode != null && prev.val > root.val){
            sencondNode = root;
        }
        prev = root;
        inOrder(root.right);
    }
}

相关文章

网友评论

      本文标题:LeetCode 第99题:恢复二叉搜索树

      本文链接:https://www.haomeiwen.com/subject/hxcwcltx.html