zoukankan      html  css  js  c++  java
  • LeetCode 99: Recover Binary Search Tree

    /**
     * 99. Recover Binary Search Tree
     * 1. Time:O(n)  Space:O(logn)
     * 2. Time:O(n)  Space:O(1)
     */
    
    // 1. Time:O(n)  Space:O(logn)
    class Solution {
        
        TreeNode p1 = null;
        TreeNode p2 = null;
        TreeNode prev = null;
    
        public void recoverTree(TreeNode root) {
            inOrder(root);
            int tmp = p1.val;
            p1.val = p2.val;
            p2.val = tmp;
        }
        
        public void inOrder(TreeNode root){
            if(root==null) return;
            if(root.left!=null) inOrder(root.left);
            if(prev!=null && root.val<prev.val){
                if(p1==null){
                    p1 = prev;
                    p2 = root;
                }else{
                    p2 = root;
                }
            }
            prev = root;
            if(root.right!=null) inOrder(root.right);
        }
    }
    
    // 2. Time:O(n)  Space:O(1)
    class Solution {
        public void recoverTree(TreeNode root) {
            TreeNode first = null;
            TreeNode second = null;
            TreeNode tmp = null;
            TreeNode prev = null;
            TreeNode cur = root;
            while(cur!=null){
                if(prev!=null && cur.val<=prev.val){
                    if(first == null) first = prev;
                    second = cur;
                }
                if(cur.left == null){
                    prev = cur;
                    cur = cur.right;
                }else{
                    tmp = cur.left;
                    while(tmp.right!=null && tmp.right!=cur)
                        tmp = tmp.right;
                    if(tmp.right == null){
                        tmp.right = cur;
                        cur = cur.left;
                    }else{
                        tmp.right = null;
                        prev = cur;
                        cur = cur.right;
                    }
                }
            }
            int val = first.val;
            first.val = second.val;
            second.val = val;
        }
    }
    
  • 相关阅读:
    hbase distributed setup and configuration
    代码优化 性能调优
    正则表达
    [转载]Java&.Net虚拟机精简(GreenJVM&GreenDotNet发布)
    [JQuery]一款不错的jquery验证框架
    js特效集
    jQuery滚动插件2 jCarousel
    c3p0连接池
    php5 apache config
    jQuery滚动插件 (轮播)
  • 原文地址:https://www.cnblogs.com/AAAmsl/p/12800848.html
Copyright © 2011-2022 走看看