zoukankan      html  css  js  c++  java
  • LeetCode

    题目:

    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?

    思路:

    中序遍历

    package bst;
    
    public class RecoverBinarySearchTree {
        
        private TreeNode prev = null;
        
        private TreeNode node1 = null;
        
        private TreeNode node2 = null;
        
        public void recoverTree(TreeNode root) {
            recoverTreeInternal(root);
            swap(node1, node2);
        }
        
        private void recoverTreeInternal(TreeNode root) {
            if (root == null) return;
            recoverTreeInternal(root.left);
            if (prev != null) {
                if (prev.val >= root.val) {
                    if (node1 == null) 
                        node1 = prev;
                    node2 = root;
                }
            }
            
            prev = root;
            recoverTreeInternal(root.right);        
        }
        
        private void swap(TreeNode node1, TreeNode node2) {
            if (node1 != null && node2 != null) {
                int tmp = node1.val;
                node1.val = node2.val;
                node2.val = tmp;
            }
        }
        
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            RecoverBinarySearchTree r = new RecoverBinarySearchTree();
            TreeNode root = new TreeNode(0);
            TreeNode right = new TreeNode(1);
            root.left = right;
            r.recoverTree(root);
        }
    
    }
  • 相关阅读:
    大数据的前景?
    PriorityBlockingQueue深度解析(好文)
    深入CAS原理
    common-lang3工具类-使用手册
    gitlab搭建
    RestTemplate转码bug
    论tigergraph边的方向性
    关于java的wait方法的深入分析
    openjdk的源码下载方式
    一个奇怪的urlencode转码问题
  • 原文地址:https://www.cnblogs.com/null00/p/5116963.html
Copyright © 2011-2022 走看看