31.恢復二叉搜索樹

題目描述:

在這裏插入圖片描述

代碼實現:

  • 還不是很懂
  • 時間複雜度:O(n)
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {void} Do not return anything, modify root in-place instead.
 */
var recoverTree = function(root) {
    if (!root) {
        return null
    }
    var curr = root
    var node1 = null
    var node2 = null
    var lastNode = null
    while (curr) {
        if (curr.left) {
            var preNode = curr.left
            while (preNode.right && preNode.right != curr) {
                preNode = preNode.right
            }
            if (!preNode.right) {
                preNode.right = curr
                curr = curr.left
            } else { 
                if (lastNode && lastNode.val > curr.val) {
                    if (node1) {
                        node2 = curr
                    } else {
                        node1 = lastNode
                        node2 = curr
                    }  
                }
            
                lastNode = curr
                curr = curr.right
                preNode.right = null
            }
        } else {
            if (lastNode && lastNode.val > curr.val) {
                if (node1) {
                    node2 = curr
                } else {
                    node1 = lastNode
                    node2 = curr
                }
            }
        
            lastNode = curr
            curr = curr.right
        }
        
    }
    const tmp = node1.val
    node1.val = node2.val
    node2.val = tmp
};

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章