zoukankan      html  css  js  c++  java
  • Recover Binary Search Tree [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?

    Sulotion: Considers a BST as a storted array, so we can traverse the BST inorderly just like iterate the ascending sequence. In this way, we can easily find two elements swapped by mistake, then swaps them back.

     1    void inorder(TreeNode * root, TreeNode ** error_node, TreeNode ** pre_node, int * is_swap){
     2         if( root == NULL )
     3             return;
     4         if(root->left != NULL)
     5             inorder(root -> left, error_node, pre_node, is_swap);
     6         
     7         if((*pre_node) != NULL) {
     8             if ((*pre_node)->val > root->val){
     9                 if ((*error_node) == NULL)
    10                     *error_node = *pre_node;
    11             }else if( (*error_node) != NULL && (*error_node)->val < root->val && (*error_node)->val > (*pre_node )->val){
    12                 //swap error node and pre node
    13                 int tmp = (*error_node)->val;
    14                 (*error_node )->val = (*pre_node)->val;
    15                 (*pre_node)->val = tmp;
    16                 *is_swap = 1;
    17                 return;
    18              }
    19         }
    20         
    21         (*pre_node )= root;   
    22         
    23         if( root -> right != NULL)
    24             inorder(root -> right, error_node, pre_node, is_swap);
    25     }
    26     
    27     void recoverTree(TreeNode *root) {
    28         // Note: The Solution object is instantiated only once and is reused by each test case.
    29         TreeNode * error_node = NULL;
    30         TreeNode * pre_node = NULL;
    31         int is_swap = 0;
    32         inorder(root, &error_node, &pre_node, &is_swap);
    33         if ( is_swap == 0 && error_node != NULL){
    34             int tmp = error_node -> val;
    35             error_node -> val = pre_node -> val;
    36             pre_node -> val = tmp;
    37         }
    38     }
  • 相关阅读:
    列出 visual studio 的所有快捷键
    CVS命令深入研究 zz
    大话系统之权限控制 (转)
    策略模式
    使用ISAPI_Rewrite对asp.net实现URL重写,显示HTML后缀
    使用ICSharpCode.SharpZipLib.dll实现在线解压缩
    ISAPI_REWRITE(转)
    ISAPI_Rewrite集
    做快乐的程序员(转)
    Request.PathInfo,Request.Path,RequestRawUrl
  • 原文地址:https://www.cnblogs.com/guyufei/p/3435683.html
Copyright © 2011-2022 走看看