• 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     }
  • 相关阅读:
    Java8时间处理
    yii2.0上传图片
    将字符串不足长度的填充到指定长度
    通过PHPExcel将Excel表文件中数据导入数据库
    css万能清除原理
    浮动+清除浮动
    DIV滚动条设置添加 CSS滚动条显示与滚动条隐藏
    地图上显示点在点上标注当前点的id
    百度地图点击地址后显示图标,保存到数据库之后,页面显示的是保存的坐标图标
    百度地图API
  • 原文地址:https://www.cnblogs.com/guyufei/p/3435683.html
Copyright © 2020-2023  润新知