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 }
  • 相关阅读:
    第三章 学习ICE 3.0Slice语言
    腾讯
    Websvn的安装
    fedora下装eclipse
    linux快捷键
    windows下SVN解决方案
    用ICE实现一个简单的聊天室
    Tortoise SVN 客户端使用方法
    GCC安装
    在VC++6.0 IDE中配置ICE工程[ ICE FOR VC++6.0 ]
  • 原文地址:https://www.cnblogs.com/boring09/p/4238991.html
Copyright © 2011-2022 走看看