Java教程

LC-恢复二叉搜索树(JavaScript实现)

本文主要是介绍LC-恢复二叉搜索树(JavaScript实现),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
/*
 * @lc app=leetcode.cn id=99 lang=javascript
 *
 * [99] 恢复二叉搜索树
 */

// @lc code=start
/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {void} Do not return anything, modify root in-place instead.
 */
var recoverTree = function(root) {
    /**
     * 中序遍历的二叉搜索树数组整体上是有序递增的,出现乱序之后
     * 从第一个节点开始遍历 找到最大值,然后找到剩下所有升序
     * 里面的最小值,二者交换位置。
     */
    let firstMaxNode = null;
    let lastMinNode = null;
    let prevNode = new TreeNode(-Infinity); //保证二叉树前面那个节点很小很小
    let inorder = root => {
        if(!root) return;
        inorder(root.left)
        //记录下两个最值
        if(prevNode.val>root.val) {
            lastMinNode=root;
            if(!firstMaxNode)
            firstMaxNode=prevNode;
        }
        prevNode=root;
        inorder(root.right);
    }
    inorder(root);
    if(firstMaxNode&&lastMinNode) {
        //交换位置
        let temp = firstMaxNode.val;
        firstMaxNode.val = lastMinNode.val;
        lastMinNode.val= temp;
    }

};
// @lc code=end


这篇关于LC-恢复二叉搜索树(JavaScript实现)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!