这是一道好题,思路尽管有,可是提交之后总是有数据过不了,又依照数据改改改。最后代码都没法看了。收到的教训是假设必须为自己的代码加上非常多非常多特殊的限定。来过一些特殊的数据的话。说明代码本身有非常大的漏洞。

这道题,我想到了要用两个指针保存乱序的节点,甚至想到了用一个pre指针来保存前面一个节点,可是问题出在哪里呢?我认为应该是自己对树的遍历理解的不够深刻。既然知道了二叉搜索树一定是用中序遍历的,那么程序的框架应该立即写的出来,先左子树,再根,再右子树,那你说什么时候更新pre指针呢,当然是訪问根节点的时候。假设把每次返回的节点作为接下来考虑的左子树,事实上并非一种中序遍历,更像是前序遍历。另一点,我当时总是想单独的找出这两个乱序的节点,然后加了非常多特殊情况考虑假设他们两个相邻怎么办。事实上这不是非常好解决的吗,由于一共仅仅有两个节点乱掉了,那么一開始不满足条件的那对节点肯定包括了当中一个,并且是较大的那个是乱掉的。往后的话,假设又出现了这个问题,一定是较小那个,不用加不论什么特殊情况的考虑。

代码很简洁,好羞愧:

TreeNode *e1, *e2, *pre;
void inorder(TreeNode *root){if(root == NULL) return;if(root->left)inorder(root->left);if(pre&&pre->val>root->val){if(e1 == NULL)   e1 = pre, e2 = root;else e2 = root;}pre = root;if(root->right)inorder(root->right);return;
} class Solution {
public:void recoverTree(TreeNode *root) {pre = NULL, e1 = NULL, e2 = NULL;inorder(root);swap(e1->val, e2->val);return;}
};

转载于:https://www.cnblogs.com/jzdwajue/p/6781985.html

leetcode第一刷_Recover Binary Search Tree相关推荐

  1. leetcode第一刷_Unique Binary Search Trees

    这道题事实上跟二叉搜索树没有什么关系,给定n个节点,让你求有多少棵二叉树也是全然一样的做法.思想是什么呢,给定一个节点数x.求f(x),f(x)跟什么有关系呢,当然是跟他的左右子树都有关系.所以能够利 ...

  2. LeetCode 669. Trim a Binary Search Tree修剪二叉搜索树 (C++)

    题目: Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so th ...

  3. LeetCode 669. Trim a Binary Search Tree

    题目: Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so th ...

  4. leetcode第一刷_Construct Binary Tree from Inorder and Postorder Traversal

    这道题是为数不多的感觉在读本科的时候见过的问题. 人工构造的过程是如何呢.兴许遍历最后一个节点一定是整棵树的根节点.从中序遍历中查找到这个元素,就能够把树分为两颗子树,这个元素左側的递归构造左子树,右 ...

  5. LeetCode 669. 修剪二叉搜索树(Trim a Binary Search Tree)

    669. 修剪二叉搜索树 669. Trim a Binary Search Tree 题目描述 LeetCode LeetCode669. Trim a Binary Search Tree简单 J ...

  6. C#LeetCode刷题之#700-二叉搜索树中的搜索(Search in a Binary Search Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4102 访问. 给定二叉搜索树(BST)的根节点和一个值. 你需要 ...

  7. C#LeetCode刷题之#501-二叉搜索树中的众数​​​​​​​(Find Mode in Binary Search Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4086 访问. 给定一个有相同值的二叉搜索树(BST),找出 BS ...

  8. LeetCode 99. Recover Binary Search Tree

    LeetCode 99. Recover Binary Search Tree 刚看到这个题真是一脸懵逼啊... 博客转载自:http://www.cnblogs.com/grandyang/p/42 ...

  9. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法

    题目地址:Convert Binary Search Tree to Sorted Doubly Linked List - LeetCode Convert a BST to a sorted ci ...

最新文章

  1. 如何导出项目到本地_【点滴故事】:如何做项目本地化?
  2. 三层交换机实现VLAN互通实例
  3. 专访元知科技崔兴龙:这位十几年前就在做AI研究的“谷歌老兵”,现在已经把AI用在了12个赛道上...
  4. 《DSP using MATLAB》Problem 6.24
  5. JWT(JSON Web Token)简介
  6. 剑指offer之partition算法
  7. dma接收双缓存 stm32_「STM32学习笔记」USART 新特性
  8. 利用这些心理学效应,轻松拿到满意offer
  9. 微信第三方平台-授权流程经验分享
  10. python-破译密码
  11. mfc连接oracle12c,MFC ADO连接Oracle12c数据库 类库文件
  12. 什么是Redis?为什么要用Redis?
  13. 江南Style之---西塘
  14. 按照lfw pairs.txt的格式生成自己的pairs.txt
  15. 如何减少http请求的次数
  16. 老婆的最后一条短信----(真的很感人)
  17. 2011年老古董MacbookPro(MD314 二代i7+SSD)升级macOS + windows11日记 - 双系统
  18. java并发惊群_成都汇智动力-Java并发:其他(总结性的东西)
  19. 阿里云OSS对象存储服务上传失败问题之一
  20. cdel调用方式解析

热门文章

  1. 最全面的homogeneous单应性坐标的定义,以及不同投影,仿射,相似,刚体变换矩阵的关系和自由度分析
  2. Effective C++ 50条款
  3. linux7 kernel.sem,centos7.4内核调优,tcp单服务器万级并发
  4. mysql整理类型_Mysql 时间类型整理
  5. 南京大学计算机考研机试,2018南大CS考研机试答案
  6. php 缓冲区,PHP的输出缓冲区
  7. snowflake mysql_snowflake数据库
  8. java中collection方法_Java 8中的Collector toCollection()方法
  9. linux下mysql无法访问_Linux系统下无法访问mysql怎么办
  10. 和12岁小同志搞创客开发:手撕代码,做一款人体感应灯