zoukankan      html  css  js  c++  java
  • leetcode 99 Recover Binary Search Tree ----- java

    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?

    给定一个排序二叉树,然后任意交换了其中两个节点,要求在使用常数个空间和不改变结构的前提下恢复原来的二叉树。

    如果用O(n)的空间复杂度,那么直接中序遍历就好了,现在用常数个,那么只需要记录两次就好了,中序遍历的时候,需要动动脑子。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
       TreeNode pre;        
        TreeNode first;    
        TreeNode second;
        
        public void inorder(TreeNode root){
            if(root == null){
                return;
            }
            inorder(root.left);
            if(pre == null){
                pre = root;
            }else{
                if(pre.val > root.val){
                    if(first == null){
                        first = pre;        
                    }
                    second = root;        
                }
                pre = root;                
            }
            inorder(root.right);
        }
        
        public void recoverTree(TreeNode root) {
            pre = null;            
            first = null;
            second = null;
            inorder(root);
            if(first!=null && second!=null){    
                int tmp = first.val;
                first.val = second.val;
                second.val = tmp;
            }
        }
    
    }
     

     

  • 相关阅读:
    AJAX请求 $.post方法的使用
    通过jQuery Ajax使用FormData对象上传文件
    iframe跨域访问
    js编码解码
    ajax头像上传
    无边框窗体和用户控件以及权限
    只开启一个窗体和进程以及多线程的操作
    通过一个窗体操作另一个窗体
    流和打印控件用法
    listview和简单的记事本操作
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/5998745.html
Copyright © 2011-2022 走看看