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;
            }
        }
    
    }
     

     

  • 相关阅读:
    比特币安全
    vxworks 的 socket, thread, 信号量模型
    libx264 安卓编译
    优秀的gdb图形化前端调试器
    gdb revert, Go to previous line in gdb
    进藏体会,高原反应
    将 ssh (security shell) 移植到 vxworks
    Pcap4J实现抓包器
    有时候有些服务类的网站就是不走心啊
    都市夜未眠
  • 原文地址:https://www.cnblogs.com/xiaoba1203/p/5998745.html
Copyright © 2011-2022 走看看