zoukankan      html  css  js  c++  java
  • Leetcode#99 Recover Binary Search Tree

    原题地址

    中序遍历二叉搜索树,正常情况下所有元素都应该按递增排列,如果有元素被交换,则会出现前面元素大于后面的情况,称作反序。由于交换了两个节点,所以通常会有两处反序,但如果是两个相邻节点发生了交换,则只会有一次反序。

    注意,如果有两次反序,前面那次一定是较大数,后面那次一定是较小数

    交换的时候注意只需要交换value就行了,别傻不啦叽的去交换节点。

    代码:

     1 vector<pair<TreeNode *, TreeNode *> > nodes;
     2 TreeNode *prev;
     3     
     4 void inorderTraverse(TreeNode *curr) {
     5   if (!curr)
     6     return;
     7   inorderTraverse(curr->left);
     8   if (prev && prev->val > curr->val)
     9     nodes.push_back(pair<TreeNode *, TreeNode *>(prev, curr));
    10   prev = curr;
    11   inorderTraverse(curr->right);
    12 }
    13 
    14 void recoverTree(TreeNode *root) {
    15   inorderTraverse(root);
    16   if (nodes.size() == 1) {
    17     int tmp = nodes[0].first->val;
    18     nodes[0].first->val = nodes[0].second->val;
    19     nodes[0].second->val = tmp;
    20   }
    21   if (nodes.size() == 2) {
    22     int tmp = nodes[0].first->val;
    23     nodes[0].first->val = nodes[1].second->val;
    24     nodes[1].second->val = tmp;
    25   }
    26 }
  • 相关阅读:
    uploadify
    mark down pad2
    yii1.1.3主从(多从)、读写分离配置
    yii多数据库
    Uploadify上传问题
    出现upstream sent too big header while reading response header from upstream错误
    Nginx 启动脚本/重启脚本
    VB6_小林的气象类模块
    进程与线程
    JDK动态代理与CGLib
  • 原文地址:https://www.cnblogs.com/boring09/p/4238991.html
Copyright © 2011-2022 走看看