zoukankan      html  css  js  c++  java
  • 第五周 Leetcode 99. Recover Binary Search Tree (HARD)

    Leetcode99 给定一个 二叉搜索树,其中两个节点被交换,写一个程序恢复这颗BST.

    只想到了时间复杂度O(n)空间复杂度O(h) h为树高的解法,还没想到空间O(1)的解法。

    交换的情况只有两种,

    case1 两个节点在树中(中序遍历序列)相邻,

    case2 两个节点在树中(中序遍历序列)不相邻。

    只要三个指针 Pre first second 即可记录两种case

    class Solution {  
    public:  
        TreeNode *first;  
        TreeNode *second;  
        TreeNode *pre;  
           
        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);  
        }  
        void recoverTree(TreeNode *root) {  
            // Start typing your C/C++ solution below  
            // DO NOT write int main() function  
            pre = NULL;  
            first = NULL;  
            second= NULL;  
            inOrder(root);  
            int val;  
            val = first->val;  
            first->val=second->val;  
            second->val=val;  
            return;  
        }  
    };
    

      

  • 相关阅读:
    Leetcode 109
    Leetcode 118
    js时间操作
    DWR搭建以及使用教程
    Ant 概念
    Eclipse 快捷键
    [eclipse] 三个操作技巧
    js call方法
    js验证密码强弱
    request getParameter getAttribute
  • 原文地址:https://www.cnblogs.com/heisenberg-/p/6596332.html
Copyright © 2011-2022 走看看