中序遍历二叉搜索树,得到的是一个有序的结果,找出其中逆序的地方就可以了。如果逆序的地方相邻,只需把逆序的相换即可;如果不相邻,则需要找到第二个逆序对的

第二个元素再做交换。

定义两个指针p和q来指定需要交换的元素,指针pre记录当前结点的前驱结点,用来判断是否逆序。

void recoverTree(TreeNode *root)
{
pre = p = q = nullptr;
dfs(root);
swap(p->val, q->val);
}
void dfs(TreeNode *root)
{
if (!root)return;
dfs(root->left);
if (pre != nullptr && pre->val > root->val)
{
if (p == nullptr)
{
p = pre;
q = root;
}
else
q = root;
}
pre = root;
dfs(root->right);
}

最新文章

  1. QQ左侧滑动显示
  2. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解
  3. Ext.NET 4.1 系统框架的搭建(后台) 附源码
  4. Educational Codeforces Round 16 C
  5. Android之Handler用法总结
  6. T-SQL中的透视和逆透视
  7. Linux命令之hwclock - 查询和设置硬件时钟
  8. Unity3D Asset Server搭建 .
  9. Qt5 OpenGL框架
  10. 使用tensorflow搭建自己的验证码识别系统
  11. Window下通过SecureCRT的SSH2跳转到另一台Linux服务器
  12. 51nod--1212 最小生成树
  13. HTML 回顾整理
  14. Redis学习-常用命令
  15. SimpleDateFormat的parse(String str)方法的用法
  16. ubuntu + usb转RS232驱动
  17. CucumberPeople 1.3.2 发布
  18. python简说(二十八)json.path
  19. WebView之javascript与android交互基础加强
  20. 动态生成CheckBox(Winform程序)

热门文章

  1. [CEOI2004]锯木厂选址 斜率优化DP
  2. C++中swap函数
  3. SPOJ - HIGH :Highways (生成树计数)
  4. Android提示框与通知的使用
  5. JS 中类型鉴别
  6. bzoj 4724 [POI2017]Podzielno 二分+模拟
  7. git branch 重命名
  8. 代码Review发现问题
  9. struts2之OGNL用法
  10. C语言数据库-二叉树